Python3:获取列表的_repr___时超过了最大递归深度
我需要一个Python中的树数据结构,它是从一个网站复制的,并且遇到了一些非常奇怪的问题 如果您创建一个包含两个参数的对象,它将正常工作;如果您只使用一个参数,它将无法打印 RecursionError:获取数据时超出了最大递归深度 列表的报告 我理解这个错误,但不清楚它发生在哪里,为什么发生。代码还应该使用默认参数工作。我知道它是可变的Python3:获取列表的_repr___时超过了最大递归深度,python,Python,我需要一个Python中的树数据结构,它是从一个网站复制的,并且遇到了一些非常奇怪的问题 如果您创建一个包含两个参数的对象,它将正常工作;如果您只使用一个参数,它将无法打印 RecursionError:获取数据时超出了最大递归深度 列表的报告 我理解这个错误,但不清楚它发生在哪里,为什么发生。代码还应该使用默认参数工作。我知道它是可变的 class node(object): def __init__(self, value, children = []): self.
class node(object):
def __init__(self, value, children = []):
self.value = value
self.children = children
def __repr__(self, level=0):
ret = "\t"*level+repr(self.value)+"\n"
for child in self.children:
ret += child.__repr__(level+1)
return ret
def add(self, value):
self.children.append(node(value))
#tree = node([1,4,3], [node([2,5,3])]) <-- works
tree = node([1,4,3]) # <-- fails
tree.add([3,4,3])
tree.add([4,4,3])
print(tree)
类节点(对象):
def uuu init(self,value,children=[]):
自我价值=价值
self.children=儿童
定义报告(自身,级别=0):
ret=“\t”*级别+报告(自身值)+“\n”
对于在self.children中的children:
ret+=子级报告(级别+1)
回程网
def添加(自身、价值):
self.children.append(节点(值))
#tree=node([1,4,3],[node([2,5,3]))默认参数中有一个可变对象
def __init__(self, value, children = []):
这将导致子项的单个列表实例
,因此,当您构建第二个列表时,您的子项列表将添加到该默认列表中,因此每次迭代都将在该列表中遍历,从而导致此无限循环
你应该这样做
def __init__(self, value, children=None):
self.value = value
if children is None:
children = []
self.children = children
或者你可以
self.children = children or []
两者都分配一个新的列表实例,该实例将删除此问题。默认参数中有一个可变对象
def __init__(self, value, children = []):
这将导致子项的单个列表实例
,因此,当您构建第二个列表时,您的子项列表将添加到该默认列表中,因此每次迭代都将在该列表中遍历,从而导致此无限循环
你应该这样做
def __init__(self, value, children=None):
self.value = value
if children is None:
children = []
self.children = children
或者你可以
self.children = children or []
两者都会分配一个新的列表实例,该实例将删除此问题。尝试将self.children=children
更改为self.children=children[:]
尝试将self.children=children
更改为self.children=children[:]
谢谢!经过一段时间的思考,我自己弄到了!我不应该从网站上复制坏代码…谢谢!经过一段时间的思考,我自己弄到了!我不应该从网站上复制坏代码。。。