【发布时间】:2015-03-29 10:15:33
【问题描述】:
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]]
【问题讨论】:
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)
列表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
>>>
【讨论】: