为什么单独附加一个列表会创建一个无限列表

Why does appending a list by itself create an infinite list

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]]

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

l.append(l[:])

当你这样做时:

l.append(l)

a 对列表 l 的引用 附加到列表 l:

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

换句话说,你把列表放在里面。这将创建一个无限引用循环,由 [...].

表示

要执行您想要的操作,您需要附加 copy 列表 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
>>>