所以这是构造
#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中也导致错误?
答案 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次。你的永远不会终止所以打到这堵墙。