Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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
Python错误:列表中的比较超出了最大递归深度_Python_List_Recursion_Runtime Error - Fatal编程技术网

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

Python错误:列表中的比较超出了最大递归深度,python,list,recursion,runtime-error,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 ] 当我运行此代码时 >>>

这就是结构

#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构造类似,但它不会导致此错误

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

如果你这样做

list = [1,2,3]
list.append(list)
它不会这样做:

list.append([1,2,3])
这将创建一个新的列表。它在列表中附加了一个“引用”。这是因为复制不是基本类型的东西很少是您想要做的事情(PHP jab已删除)

这么说吧

list.append(4)
现在:

将显示4,因为第三件事(实际上是从零开始的第四件事)是列表引用,我们看第四件(第五件),这是我们刚刚附加的4。所以

list is list[3]
是真的,它们指的是相同的实际LIT

递归发生的原因与您无法执行
打印(列表)
的原因相同,它开始查找,然后无休止地查找自身

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

如果你这样做了

list = [1,2,3]
list.append(list)
它不会这样做:

list.append([1,2,3])
这将创建一个新的列表。它在列表中附加了一个“引用”。这是因为复制不是基本类型的东西很少是您想要做的事情(PHP jab已删除)

这么说吧

list.append(4)
现在:

将显示4,因为第三件事(实际上是从零开始的第四件事)是列表引用,我们看第四件(第五件),这是我们刚刚附加的4。所以

list is list[3]
是真的,它们指的是相同的实际LIT

递归发生的原因与您无法执行
打印(列表)
的原因相同,它开始查找,然后无休止地查找自身

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

如果你这样做了

list = [1,2,3]
list.append(list)
它不会这样做:

list.append([1,2,3])
这将创建一个新的列表。它在列表中附加了一个“引用”。这是因为复制不是基本类型的东西很少是您想要做的事情(PHP jab已删除)

这么说吧

list.append(4)
现在:

将显示4,因为第三件事(实际上是从零开始的第四件事)是列表引用,我们看第四件(第五件),这是我们刚刚附加的4。所以

list is list[3]
是真的,它们指的是相同的实际LIT

递归发生的原因与您无法执行
打印(列表)
的原因相同,它开始查找,然后无休止地查找自身

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

如果你这样做了

list = [1,2,3]
list.append(list)
它不会这样做:

list.append([1,2,3])
这将创建一个新的列表。它在列表中附加了一个“引用”。这是因为复制不是基本类型的东西很少是您想要做的事情(PHP jab已删除)

这么说吧

list.append(4)
现在:

将显示4,因为第三件事(实际上是从零开始的第四件事)是列表引用,我们看第四件(第五件),这是我们刚刚附加的4。所以

list is list[3]
是真的,它们指的是相同的实际LIT

递归发生的原因与您无法执行
打印(列表)
的原因相同,它开始查找,然后无休止地查找自身


它结束是因为Python有一个最大堆栈深度,默认情况下是500,我认为,您可以有一个函数调用一个函数调用一个函数。。。。。还有497次。你的将永远不会终止,所以点击这面墙。

谢谢你的回复,但我仍然不明白为什么列表1中的列表2不会导致错误。好的,如果我给你
list1=[list2,list1]
并且你在其中搜索
list2
,你会立即找到它。它从不尝试查看它是否在
list1
(如
list1[1]
-第二件事)@user3218450在list1中使用该推理list1不应该导致错误,对吗?由于list1[1]是list1,因此可以获得:
sys.getrecursionlimit()
。您可以通过运行
sys.setrecursionlimit()
来更改最大值。我的默认递归限制是1000,但它可能是特定于计算机的。@user3218450您希望发生什么,如果我要求您为列表y定义“x in y”,您会怎么做,请说“检查列表本身是否为x”或“对于y中的每一项,请查看x是否在其中”。感谢您的回复,但我仍然不明白为什么列表1中的列表2不会导致错误。好的,如果我给您
list1=[list2,list1]
并且您在其中搜索
list2
,您会立即找到它。它从不尝试查看它是否在
list1
(如
list1[1]
-第二件事)@user3218450在list1中使用该推理list1不应该导致错误,对吗?由于list1[1]是list1,因此可以获得:
sys.getrecursionlimit()
。您可以通过运行
sys.setrecursionlimit()
来更改最大值。我的默认递归限制是1000,但它可能是特定于计算机的。@user3218450您希望发生什么,如果我要求您为列表y定义“x in y”,您会怎么做,请说“检查列表本身是否为x”或“对于y中的每一项,请查看x是否在其中”。感谢您的回复,但我仍然不明白为什么列表1中的列表2不会导致错误。好的,如果我给您
list1=[list2,list1]
并且您在其中搜索
list2
,您会立即找到它。它从不尝试查看它是否在
list1
(如
list1[1]
-第二件事)@user3218450在list1中使用该推理list1不应该导致错误,对吗?由于list1[1]是list1,因此可以获得:
sys.getrecursionlimit()
。您可以通过运行
sys.setrecursionlimit()
来更改最大值。我的默认r