2015-04-26 42 views
1
import random 
stats = [] 
statslist = [] 
rollslist = [] 
for var1 in range(4): 
    stats.append(random.randrange(1, 7)) 
rollslist.append(stats) 
print(stats) 
b = min(stats) 
stats.remove(b) 
print(sum(stats)) 
statslist.append(sum(stats)) 
print(stats) 
print(rollslist) 
print(statslist) 

實際結果意外的名單追加

[5, 1, 1, 3] 
9 
[5, 1, 3] 
[[5, 1, 3]] 
[9] 

預期的結果

[5, 1, 1, 3] 
9 
[5, 1, 3] 
[[5, 1, 1, 3]] 
[9] 

我期待它打印四個數字第四結果,而不是三個它給我。我在數字被刪除之前附加了列表。我錯過了什麼?

+0

它的所有有關的參考。 –

回答

6

您添加了一個可變列表。稍後進行修改時,修改會影響您放入列表中的對象,因爲它是直接引用而不是副本。

做一個列表的副本,最簡單的方法是使用切片:

rollslist.append(stats[:]) 
3

正如Avinash提到的那樣,這是因爲您仍然指的是stats列表。意思是,稍後進行的更改(如刪除項目)仍將反映出來。對於預期的行爲,您可以像這樣make a copy of the list

newCopy = list(stats) 
rollslist.append(newCopy)