我有一個嵌套list A
。然後我讓list B=list A
。當我嘗試通過使用B[1][2]=2
更改其中的某些元素來編輯列表B時,list A[1][2]
也發生了變化。Python:如何獨立編輯列表的副本?
爲什麼會發生這種情況?的
我有一個嵌套list A
。然後我讓list B=list A
。當我嘗試通過使用B[1][2]=2
更改其中的某些元素來編輯列表B時,list A[1][2]
也發生了變化。Python:如何獨立編輯列表的副本?
爲什麼會發生這種情況?的
代替:
listB = listA
嘗試:
listB = listA[:]
下面是爲什麼發生這種情況一個很好的解釋:
http://robertheaton.com/2014/02/09/pythons-pass-by-object-reference-as-explained-by-philip-k-dick/
因爲你分配一個參考,所以列表B實際上指向列表A.您將不得不使用列表副本。回答在這裏:
編輯解釋整個過程雖然...:
list = [[],[],[],[]]
a = 0
b = 3
list[a] = [1,2,3]
list[b] = list[a][:]
現在list[b]
是一個拷貝,而不是相同的列表爲list[a]
,你不能單獨進行編輯。
除了你的解決方案不適用於嵌套列表的事實,'list [a] = [1,2,3]'會產生'NameError:name'a'沒有被定義' – SiHa 2015-04-01 11:15:18
@SiHa爲什麼要這樣不行?你有嵌套列表的列表。 a表示其中之一,可以說第一個a = 0並且是另一個,也可以是b = 3。那麼你設置一個,如果它沒有設置,並複製到B?我實際測試了它。 ofc這不會工作,如果你只是複製粘貼它。 (編輯代碼,以便複製粘貼的人將理解我的過程^) – yamm 2015-04-01 11:58:25
您的代碼現在更清晰了,但它仍不能回答OP的問題。您已經展示瞭如何將列表從嵌套列表的一個元素複製到* same *列表的另一個元素。 OP想要將整個嵌套列表複製到另一個嵌套列表。 – SiHa 2015-04-01 13:13:44
試試這個:
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.
謝謝你! :D – Relle 2015-04-01 10:43:43