2014-02-08 15 views
0

這是代碼:的append()函數的行爲出現異常

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

爲什麼?這很奇怪,不是嗎?

回答

3

每次將position添加到列表中時,您只能添加一個參考,而不是副本。當打印mylist時,您會看到多次打印相同的共享列表。

與切片語法時附加創建一個副本:

mylist.append(position[:]) 

這裏position[:]創建片從開始到結束,返回一個新的列表對象與淺拷貝。