我刚看到如下输出 - 只想知道这里发生了什么。
>>> l = [1,2,3,4]
>>> l[0]=l
>>> l
[[...], 2, 3, 4]
为什么l [0]值显示如下?任何人都可以解释为什么这种行为。 我以为它会像[[1,2,3,4],2,3,4]那样回归。
干杯, 卡莱
答案 0 :(得分:5)
它显示...
因为否则它将无限递归。
Python中的列表对象是指向列表的指针 - 指定它就像l[0] = l
不复制一样。例如,尝试
l1 = [1, 2, 3, 4]
l2 = [1, 2]
l2[0] = l1
print l2
# [[1, 2, 3, 4], 2]
l2[0].append(5)
print l1
# [1, 2, 3, 4, 5]
请注意,即使您从未明确更改过l1
,但现在已将其附加到。
因此,当您在其自身中放置列表时,列表中的该项目仍然是指向整个列表的链接。在上面的代码之后,尝试执行:
l[1] # ==> 2
l[0][1] # ==> 2
l[0][0][1] # ==> 2
答案 1 :(得分:3)
使用列表的副本来避免无限递归:
In [10]: l = [1,2,3,4]
In [11]: l[0] = l[:]
In [12]: l
Out[12]: [[1, 2, 3, 4], 2, 3, 4]
答案 2 :(得分:0)
如果您使用的是PrettyPrinter,那么输出就会自我解释
>>> l = [1,2,3,4]
>>> l[0]=l
>>> l
[[...], 2, 3, 4]
>>> pp = pprint.PrettyPrinter(indent = 4)
>>> pp.pprint(l)
[<Recursion on list with id=70327632>, 2, 3, 4]
>>> id(l)
70327632