为什么我不能修改在函数内作为参数传递的列表?



这是上下文。我有一个这样定义的树结构:

class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None

并且我试图用函数CCD_ 1递归地迭代树。该函数依赖于作为参数传递的列表to_do

x = defaultdict(lambda:[])
def find_x (x, to_do):
next_to_do = []
for node, n in to_do:
x[n].append(node.val)
if node.left:
next_to_do.append((node.left, n - 1))
if node.right:
next_to_do.append((node.right, n + 1))
to_do = next_to_do
to_do = [(root, 0)]
while to_do:
find_x(x, to_do)

当我运行我的函数时,我看到to_do没有更新。我知道,如果我想更新to_do,我需要更改find_x并用return next_to_do替换最后一行,我需要将while循环的内部更改为to_do = find_x(x, to_do)

我的问题是。既然我的列表to_do是一个可变对象,而且它是在函数find_x0之外定义的,那么函数find_x应该可以修改它。为什么不是这样呢?

谢谢你的帮助!

如果要在函数find_x中创建一个新变量to_do,可以使用:

to_do[:] = next_to_do

最新更新