为什么单独附加一个列表会创建一个无限列表
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
>>>
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
>>>