这是上下文。我有一个这样定义的树结构:
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_x
0之外定义的,那么函数find_x
应该可以修改它。为什么不是这样呢?
谢谢你的帮助!
如果要在函数find_x
中创建一个新变量to_do
,可以使用:
to_do[:] = next_to_do