2015-04-01 88 views
-2

我有一個嵌套list A。然後我讓list B=list A。當我嘗試通過使用B[1][2]=2更改其中的某些元素來編輯列表B時,list A[1][2]也發生了變化。Python:如何獨立編輯列表的副本?

爲什麼會發生這種情況?的

回答

0

因爲你分配一個參考,所以列表B實際上指向列表A.您將不得不使用列表副本。回答在這裏:

python list by value not by reference

+0

謝謝你! :D – Relle 2015-04-01 10:43:43

-2

編輯解釋整個過程雖然...

list = [[],[],[],[]] 
a = 0 
b = 3 
list[a] = [1,2,3] 
list[b] = list[a][:] 

現在list[b]是一個拷貝,而不是相同的列表爲list[a],你不能單獨進行編輯。

+0

除了你的解決方案不適用於嵌套列表的事實,'list [a] = [1,2,3]'會產生'NameError:name'a'沒有被定義' – SiHa 2015-04-01 11:15:18

+0

@SiHa爲什麼要這樣不行?你有嵌套列表的列表。 a表示其中之一,可以說第一個a = 0並且是另一個,也可以是b = 3。那麼你設置一個,如果它沒有設置,並複製到B?我實際測試了它。 ofc這不會工作,如果你只是複製粘貼它。 (編輯代碼,以便複製粘貼的人將理解我的過程^) – yamm 2015-04-01 11:58:25

+0

您的代碼現在更清晰了,但它仍不能回答OP的問題。您已經展示瞭如何將列表從嵌套列表的一個元素複製到* same *列表的另一個元素。 OP想要將整個嵌套列表複製到另一個嵌套列表。 – SiHa 2015-04-01 13:13:44

0

試試這個:

A = [[1,2,3],[4,5,6],[1,2,3,4]] 
    B = [] 
    for i in range(len(A)): 
     c = list(A[i]) 
     B.append(c) 

然後你就可以變動b不改變A.