这是代码:
import random
mylist=[]
position=[300,300]
while 1:
randomint = random.randint(1,3)
print mylist
if randomint == 3:
position[0]+=5
mylist.append(position)
而不是:
[]
[[305, 300], [310, 300]]
[[305, 300], [310, 300], [315, 300]]
[[305, 300], [310, 300], [315, 300]]
[[305, 300], [310, 300], [315, 300]]
... 我明白了:
[]
[[305, 300]]
[[305, 300]]
[[305, 300]]
[[305, 300]]
[[305, 300]]
[[305, 300]]
[[310, 300], [310, 300]]
[[315, 300], [315, 300], [315, 300]]
[[315, 300], [315, 300], [315, 300]]
[[315, 300], [315, 300], [315, 300]]
[[315, 300], [315, 300], [315, 300]]
[[315, 300], [315, 300], [315, 300]]
[[315, 300], [315, 300], [315, 300]]
[[315, 300], [315, 300], [315, 300]]
[[315, 300], [315, 300], [315, 300]]
[[320, 300], [320, 300], [320, 300], [320, 300]]
...
为什么呢?这很奇怪,不是吗?
答案 0 :(得分:3)
每次将position
追加到列表中时,只会添加引用,而不是副本。然后打印mylist
时,您会看到多次打印相同的共享列表。
使用切片语法附加时创建副本:
mylist.append(position[:])
这里position[:]
从头到尾创建一个切片,返回一个带有浅拷贝的新列表对象。