为什么附加列表本身会创建一个无限列表

时间:2015-01-30 00:44:03

标签: python list recursion

l = [1, 2]
l.append(l)
>>>l
[1, 2, [...]] #l is an infinite list

为什么这会创建无限列表而不是创建:

l = [1, 2]
l.append(l)
>>>l
[1, 2, [1, 2]]

2 个答案:

答案 0 :(得分:8)

当你这样做时:

l.append(l)

列表l引用附加到列表l

>>> l = [1, 2]
>>> l.append(l)
>>> l is l[2]
True
>>>

换句话说,您将列表放在其中。这会创建一个无限的参考周期,由[...]表示。


要执行您想要的操作,您需要附加列表l副本

>>> l = [1, 2]
>>> l.append(l[:])  # Could also do 'l.append(list(l))' or 'l.append(l.copy())'
>>> l
[1, 2, [1, 2]]
>>> l is l[2]
False
>>>

答案 1 :(得分:2)

很简单,因为每个对象都会在第三个元素中引用自身。要实现[1, 2, [1, 2]],请使用列表的副本。

l.append(l[:])