2010-03-29 76 views
19

嗨我想複製一個2D列表,這樣如果我修改1個列表,另一個不會被修改。在Python中複製2D列表

對於1個d名單,我只是這樣做:

a = [1,2] 
b = a[:] 

現在,如果我修改B,A不被修改。

但這並不二維表的工作:

a = [[1,2],[3,4]] 
b = a[:] 

如果我修改B,A被修改爲好。

我該如何解決這個問題?

+3

一大堆,當人們用戶嵌套表,需要給他們以這種方式拷貝的時候,他們真的想要使用'numpy'。 – 2010-03-29 23:23:18

回答

34

對於作品無論維數更通用的解決方案,使用copy.deepcopy()

import copy 
b = copy.deepcopy(a) 
+0

雖然在大多數情況下,我可能會說'from複製導入deepcopy'因爲名稱衝突不太可能,並且它看起來更好。 ;) – Amber 2010-03-29 23:18:19

+1

@Dav,你提出一個有效的觀點。我更喜歡總是導入模塊,以避免名稱衝突,而不是逐個處理函數。 :) – 2010-03-29 23:20:59

+0

請注意,這也會深入複製列表中的實際元素。 – FogleBird 2010-03-29 23:27:54

35
b = [x[:] for x in a] 
+4

+1因爲合適。我個人喜歡避免複製/深層複製(在現實生活中很少有他們的有效用例;對於超過2維的列表我們也可以這麼說) – ChristopheD 2010-03-29 23:16:51