學習簡單而使用的copy模組:
copy模組中只有兩個方法:copy.copy和copy.deepcopy,分別稱之為淺拷貝和深拷貝,以澡堂子為例來解釋。
import copy
1.copy.copy:
a=[1,2,3,['x','y']]
#a引用(租賃、使用)這個澡堂子的四個隔間(位址),其中【『x』,『y』】是乙個包間,適合兩個物件以上。
c=copy.copy(a)
a.insert(1,5)
>>>a=[1,5,2,3,['x','y'],4]
#但c並不會因此改變,因為c租賃的只是原來的四個隔間(即使隔間數目被a擴建或插入)
c=[1,2,3,['x','y']]
#但如果a改變和c共用的某個隔間,比如['x','y']
>>>[1,5,2,3,['x','y','z'],4]
#因為c也使用這個隔間,所以當下次老闆c過來視察自己租賃的隔間時,就有
c=[1,2,3,['x','y','z']]
看到沒有,a的那個包間對於c也是改變了,但隔間即『5』、『4』對應的位址對c沒有影響,對c影響的只是copy.copy發生時刻a租賃的澡堂的原貌(位址)。
2.copy.deepcopy
a=[1,2,3,['x','y']]
d=copy.deepcopy(a)
#這相當於d自己照著a澡堂此時的樣子重新蓋了一間澡堂,所以a所在的澡堂無論被拆還是如何都對d無影響,相當於另起高樓,財大氣粗。
學習copy模組對理解「在賦值和引用時到底儲存了值還是保持了位址」有幫助。
附加一句:c=a[:]只能針對基本型別(字串、數字),如果a中包含子列表,無法實現產生新錶的作用。
copy模組中的copy與deepcopy的區別
每空閒下來,就覺得以前寫的部落格很low.也許現在也很low 好吧就當公升級版的low吧 如果要了解copy與deepcopy的區別,就需要了解python的儲存機制 python在賦值會在記憶體裡開闢乙個空間來存放值這就叫 記憶體位址 同時會開闢乙個空間來存放名字叫命名,在資料相同長度在一定範圍 ...
python的copy模組理解
首先直接上結論 我們尋常意義的複製就是深複製,即將被複製物件完全再複製一遍作為獨立的新個體單獨存在。所以改變原有被複製物件不會對已經複製出來的新物件產生影響。而淺複製並不會產生乙個獨立的物件單獨存在,他只是將原有的資料塊打上乙個新標籤,所以當其中乙個標籤被改變的時候,資料塊就會發生變化,另乙個標籤也...
Python學習 copy模組
在python中,對於物件的拷貝,分為淺拷貝 copy 與深拷貝 deepcopy 兩種方式。淺拷貝由操作符 完成,或者由copy模組中的copy方法完成,而深拷貝由copy模組中的deepcopy方法承擔。對於淺拷貝與深拷貝,如果拷貝物件都是不可變物件,則兩者沒有區別。如果拷貝物件是可變物件,則淺...