根據數據類型分爲兩部分進行剖析:css
1. int、str類型app
【int類型實例】 >>> import copy # 導入copy模塊 >>> a1=11 >>> a2=a1 # 直接賦值引用 >>> a3=copy.copy(a1) # 淺拷貝 >>> a4=copy.deepcopy(a1) # 深拷貝 >>> id(a1),id(a2),id(a3),id(a4) >>> (1357559168, 1357559168,1357559168,1357559168) 【str類型實例】 >>> import copy # 導入copy模塊 >>> b1='css' >>> b2=b1 # 直接賦值引用 >>> b3=copy.copy(b1) # 淺拷貝 >>> b4=copy.deepcopy(b1) # 深拷貝 >>> id(b1), id(b2),id(b3),id(b4) >>> (43826624,43826624,43826624,43826624)
由以上實例可得出:int和str類型,不管是直接賦值引用 or 深淺拷貝,均指向同一塊內存空間,所以對於int和str類型的變量而言,三種方法做用相同spa
2. list、tuple、dict等類型(以list類型爲例)code
【示例】 >>> import copy # 導入copy模塊 >>> L1=[11,22,33,['a','b','c']] # 定義list變量,其中L1[3]的值是一個子列表 >>> L2=L1 # 直接賦值引用 >>> L3=copy.copy(L1) # 淺拷貝 >>> L4=copy.deepcopy(L1) # 深拷貝 >>> id(L1),id(L2),id(L3),id(L4) >>> (43777928,43777928,43776968,43795912) >>> L1.append(44) # L1列表父對象添加元素 >>> L1[3].append('d') # L1列表子對象添加元素 >>> L1 >>> [11,22,33,['a','b','c','d'],44] >>> L2 >>> [11,22,33,['a','b','c','d'],44] >>> L3 >>> [11,22,33,['a','b','c','d']] >>> L4 >>> [11,22,33,['a','b','c']]
以上示例說明:對象
1. 直接賦值便是對象的引用,指向同一內存地址blog
2. 淺拷貝:只拷貝一層,如上述示例,只拷貝父對象,不拷貝父對象內部的子對象(L3[3]仍指向原L1子對象的內存地址),故分別在L1父對象和子對象中添加元素44和'd', 對L3父對象無影響,只對其子對象有影響內存
3. 深拷貝:拷貝父對象及子對象class