2012-07-09 26 views
4

我想要做的是分配一個嵌套列表到另一個列表。例如,從alist到blist。嵌套的Python列表分配

alist = [[0], [1], [2], [3]] 
blist = alist[:] 
blist[0].append(1) 

這樣,id(alist[0])等於id(alist[1]),所以ALIST也變爲[[0,1], [1], [2], [3]],這不是我想要的。

解決方法我有是:

alist = [[0], [1], [2], [3]] 
blist = [] 
for item in alist: 
    blist.append(item[:]) 
blist[0].append(1) 

在此解決方案,ALIST不會被改變blist的項目的影響。 但是,它似乎不是pythonic,有沒有更好的解決方案?這可以解決更多2級嵌套列表的深層副本。例如:alist = [[[1], 10], [[2], 20], [[3], 30]]

+1

你的解決方法可以更簡單地寫爲:'blist = [項目[:]在ALIST項目]'或者我更喜歡'[列表(項目)列表(項目)]。然而@ cha0site的解決方案是正確的。 – jamylak 2012-07-09 07:05:11

回答

7

我想你想使用copy.deepcopy(),這也解決了更深層次的副本:

>>> import copy 
>>> alist = [[0], [1], [2], [3]] 
>>> blist = copy.deepcopy(alist) 
>>> blist[0].append(1) 
>>> alist 
[[0], [1], [2], [3]] 
>>> blist 
[[0, 1], [1], [2], [3]] 
+0

是的,這就是我想要的,非常感謝,cha0site! – 2012-07-09 07:21:52