Python错误:列表中的比较超出了最大递归深度

时间:2014-06-02 06:07:51

标签: python list recursion runtime-error

所以这是构造

#list1 and list2
list1 = [(True,), (True,)]
list2 = [(True,), (True,)]
#Transformation
list1[0] = list2
list1[1] = list1
list2[0] = list1
list2[1] = list2

给出了:

#Result
#list1 = [ list2 , list1 ]
#list2 = [ list1 , list2 ]

当我运行此代码时

>>>list2 in list1
True
>>>list1 in list1
RuntimeError: maximum recursion depth exceeded in comparison

我认为发生错误是因为获取list1的实际值以进行比较会产生无限循环。但是,尽管构造类似,但list2不会导致此错误。

所以我的问题是,为什么错误存在差异?不应该在list1""列表2中也导致错误?

1 个答案:

答案 0 :(得分:3)

如果你这样做

list = [1,2,3]
list.append(list)

它没有这样做:

list.append([1,2,3])

这将创建一个新列表。它在列表中附加“引用”。这是因为复制非基本类型的东西很少是你想要做的(PHP jab删除)

所以说你做了

list.append(4)

现在:

print(list[3][4])

将显示4,作为第三件事(第4件事,因为他们从零开始)是列表参考,我们看第4(第5),这是我们刚刚附加的4。所以

list is list[3]

是的,它们指的是相同的实际lits。

递归的原因与你不能做print(list)的原因相同,它开始寻找,然后最终无休止地看着它。

它结束是因为Python有一个最大堆栈深度,默认情况下我觉得500,你可以有一个函数调用函数调用函数..... 497次。你的永远不会终止所以打到这堵墙。