2012-11-23 50 views
3

我想追加到list1,另一個列表2,所以修改list2和另一個時間追加到list1,但list1的值被覆蓋。將列表追加到列表中,覆蓋值

我以前[:]與追加和工程確定:

list1=[1,2] 
list2=[] 

list2.append(list1[:]) 

list1[0]=20 

print list1, list2 # [20, 2] [[1, 2]] 

但問題是,當列表有內部

list1=[[2,1],[2]] 
list2=[] 

list2.append(list1[:]) 

print list1, list2 #[[2, 1], [2]] [[[2, 1], [2]]] 

list1[0][0]=25 

list2.append(list1) 

print list1, list2 #[[25, 1], [2]] [[[**25**, 1], [2]], [[25, 1], [2]]] 

我希望是最後一次打印是另一個列表[[25, 1], [2]] [[[2, 1], [2]], [[25, 1], [2]]]

+2

這裏的問題是,列表是可變的 - 你正在改變列表的價值,和你的其他名單內的列表只是一個指向它,這樣也發生了變化。 –

回答

3

我想你問的是:

from copy import deepcopy 
list1.append(deepcopy(list2)) 
0

我建議你製作一個新對象,其內容與list1指向的列表完全相同,並且使lisT1指向此副本。這樣一來,如果修改列表1(或什麼列表1點),LIST1(或什麼LIST1點)將保持不變。 例如:

>>> list1=[[2,1],[2]] 
>>> list2=[] 
>>> lisT1 = [[2,1],[2]] 
>>> list2.append(lisT1[:]) 
>>> print (list1, list2) 
[[2, 1], [2]] [[[2, 1], [2]]] 
>>> list1[0][0]=25 
>>> list2.append(list1) 
>>> print (list1, list2) 
[[25, 1], [2]] [[[2, 1], [2]], [[25, 1], [2]]]