gpt4 book ai didi

Python:打印树的所有节点无意中存储数据

转载 作者:太空宇宙 更新时间:2023-11-04 07:02:08 26 4
gpt4 key购买 nike

我通过创建一个 Node 对象在 Python 中创建了一棵通用树。每个节点可以有 0、1 或 2 棵树。

我正在尝试创建一种方法来打印树中所有节点的列表。列表不需要按顺序排列。这是我的简单尝试:

def allChildren(self, l = list()):
l.append(self)
for child in self.children:
l = child.allChildren(l)
return l

我第一次运行这个方法时,它工作正常。但是,出于某种原因,它正在存储以前的运行。第二次运行该方法时,它会打印所有节点两次。即使我创建了 2 棵独立的树,它仍然会记住之前的运行。例如:我创建了 2 棵树,a 和 b。如果我运行 a.allChildren() 我会收到正确的结果。然后我运行 b.allChildren() 并接收 a 的所有节点和 b 的所有节点。

最佳答案

您有一个可变值作为函数参数 l 的默认值。在 Python 中,这意味着当您调用 l.append(self) 时,您将永久修改默认参数。

为了避免这个问题,每次调用函数时都将l设置为一个新的list,如果没有传入list:

def allChildren(self, l = None):
if l is None:
l = list()
l.append(self)
for child in self.children:
l = child.allChildren(l)
return l

这种现象在 this question 中得到了更彻底的解释。 .

关于Python:打印树的所有节点无意中存储数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com