2012-10-23 21 views
-2

我有一個列表,我添加項目作爲程序運行,並且我創建了此列表的副本,因此我可以更改/修改/檢查副本而不更改原本的。python中的列表副本沒有跟上更改

這是我到目前爲止有:

import copy 
originallist.append(stuff) 

combined=''.join(originallist) 

copyoriginal=copy.deepcopy(originallist) 
##this didnt work as copyoriginal stayed empty [] while originallist would change. 
#i also tried 
copyoriginal=list(originallist) 
#AND 
copyoriginal=originallist[:] 
#and with both cases copyoriginal remained at [] while originallist would change!! 

爲什麼它不會改變?

+0

我認爲你是在正確的軌道上,但一定還有其他事情正在進行。如果'originallist'開頭的東西在裏面,'''copyoriginal'是什麼意思保留爲空[]「'?更具體的例子將有助於實際產出和預期產出。 –

+0

您好,感謝您的快速回復! 我的意思是,當我調試程序,它顯示我copyoriginal是[](通過將鼠標懸停在它上面,而originallist有它的值[2,6] – 3MIN3M

回答

0

如果你想另一個列表「趕不上變化」,你可能要考慮一個簡單的參考,而不是一個副本:

a = [1, 2, 3] 
b = a # b refers to a 

a[0] = 3 
print b # prints [3, 2, 3] 

您可以隨時進行復印後,當你決定要停止跟蹤更改:

b = b[:] 
1

該列表的副本不會遵循對原始列表所做的更改;一旦複製完成,python的列表就完全相互分離了。

如果沒有自定義類,你想做的事情是不可能的。

+0

ohhh所以有另一種方法來使蟒蛇跟上改變與原來的名單,並將其複製到共同主義?或唯一的辦法是繼續製作原始名單的副本,因爲我每次都添加值..?在此先感謝 – 3MIN3M

+0

@ 3MIN3M:正確。製作副本原始列表,一旦您完成更改,或對兩個列表進行更改。 –

0

如果你想的名稱引用同一個對象,你可以這樣做:

a = b = [] 
a.append(1) 
b.append(2) 
print(b) 
# returns [1,2] 

這不會讓你改變其中一個而不會影響其他的,但它會讓你看到任何一個的變化。