最近發現list_a = list_b
這種方式其實是多了乙個引用,而不是真正的拷貝,這個坑之前從未發現,特此記錄
對於數字、字串、元組這些不可變物件,對賦值後的新物件修改不影響原物件
>>> a=0
>>> a
0>>> b=a
>>> b
0>>> b=1
>>> b
1>>> a
0
對於列表、字典、集合,直接賦值相當於多乙個引用,實際兩個物件是乙個內容,修改乙個另乙個也會變
>>> a=[1,2,3]
>>> a
[1, 2, 3]
>>> b=a
>>> b
[1, 2, 3]
>>> b[0]=0
>>> b
[0, 2, 3]
>>> a
[0, 2, 3]
解決方法是,要麼新建乙個,然後挨個賦值,或者使用copy中的copy
>>> import copy
>>> a=[1,2,3]
>>> b=copy.copy(a)
>>> b
[1, 2, 3]
>>> b[0]=0
>>> b
[0, 2, 3]
>>> a
[1, 2, 3]
但是這是淺拷貝,如果可變物件裡還有可變物件,比如
>>> a=[1,2,3]
>>> b=[a]
這樣對b進行淺拷貝後,a的改變仍然會影響所有包含a的可變物件,解決方式是使用深拷貝copy.deepcopy()。
總的來說就是,python中的可變物件拷貝時要慎重。
python中的賦值 淺拷貝 深拷貝
在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用 import copy a 1,2,x y b ac copy.copy a d copy.deepcopy a print id b id a i...
Python中賦值 淺拷貝與深拷貝
原文 python中關於物件複製有三種型別的使用方式,賦值 淺拷貝與深拷貝。他們既有區別又有聯絡,剛好最近碰到這一類的問題,研究下。一 賦值 在python中,物件的賦值就是簡單的物件引用,這點和c 不同。如下 list a 1,2,3,hello python c list b list a 這種...
Python中賦值 淺拷貝與深拷貝
python中關於物件複製有三種型別的使用方式,賦值 淺拷貝與深拷貝。他們既有區別又有聯絡,剛好最近碰到這一類的問題,研究下。一 賦值 在python中,物件的賦值就是簡單的物件引用,這點和c 不同。如下 list a 1,2,3,hello python c list b list a 這種情況下...