2017-02-12 137 views
0

任何幫助將不勝感激!問題與彈出()和append()

res = [] 
s = [1,2,3,4,5,6] 
s.pop() 
res.append(s) 
print res 
s.pop()                     
res.append(s) 
print res 

上面的Python代碼提供了以下結果

[[1, 2, 3, 4, 5]] 
[[1, 2, 3, 4], [1, 2, 3, 4]] 

我不明白爲什麼上的流行會影響水庫。我指的是打印結果應該是

[[1,2,3,4,5]] 
[[1,2,3,4,5],[1,2,3,4]] 
+0

你與*同一列表的工作*。你已經將's'添加到'res' *兩次*,但它仍然是**相同的列表** –

+0

在添加s到res之前,我彈出s中的最後一項。所以res中的兩項應該是不同的,對吧? – n00d1es

回答

0

在Python,每個值都是一個參考(指針)的一個對象。 賦值總是複製值(這是一個指針);兩個這樣的指針可以指向同一個對象。

爲了獲得所需的結果,你需要複製的初始列表:

res = [] 
s = [1,2,3,4,5,6] 
s.pop() 
res.append(s[:]) 
print(res) 
s.pop() 
res.append(s[:]) 
print(res) 

同樣可以使用list.copy()函數來完成:

... 
res.append(s.copy()) 
... 

輸出:

[[1, 2, 3, 4, 5]] 
[[1, 2, 3, 4, 5], [1, 2, 3, 4]] 
+0

謝謝@RomanPerekhrest。現在我明白了。 – n00d1es