Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3:获取列表的_repr___时超过了最大递归深度_Python - Fatal编程技术网

Python3:获取列表的_repr___时超过了最大递归深度

Python3:获取列表的_repr___时超过了最大递归深度,python,Python,我需要一个Python中的树数据结构,它是从一个网站复制的,并且遇到了一些非常奇怪的问题 如果您创建一个包含两个参数的对象,它将正常工作;如果您只使用一个参数,它将无法打印 RecursionError:获取数据时超出了最大递归深度 列表的报告 我理解这个错误,但不清楚它发生在哪里,为什么发生。代码还应该使用默认参数工作。我知道它是可变的 class node(object): def __init__(self, value, children = []): self.

我需要一个Python中的树数据结构,它是从一个网站复制的,并且遇到了一些非常奇怪的问题

如果您创建一个包含两个参数的对象,它将正常工作;如果您只使用一个参数,它将无法打印

RecursionError:获取数据时超出了最大递归深度 列表的报告

我理解这个错误,但不清楚它发生在哪里,为什么发生。代码还应该使用默认参数工作。我知道它是可变的

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[:]
谢谢!经过一段时间的思考,我自己弄到了!我不应该从网站上复制坏代码…谢谢!经过一段时间的思考,我自己弄到了!我不应该从网站上复制坏代码。。。