一 賦值、淺拷貝、深拷貝
1 賦值
對象之間賦值本質上 是對象之間的引用傳遞而已。也就是多個對象指向同一個數據空間。
2 淺拷貝
淺拷貝是對一個對象的頂層數據的拷貝
說明:
如果 如圖,C對象的頂層數據就是[a,b],所以通過淺拷貝給D對象時D對象中也是[a,b]。這如同東施效顰一樣,只能看到一個西施的外在並進行復制,而不能去複製更深處的氣質。
3 深拷貝
深拷貝是對於一個對象所有層次的拷貝(遞歸)
進一步理解深拷貝
4 拷貝注意點
<1> 拷貝的其他方式
- 分片表達式可以複製一個序列
- 字典的copy方法可以拷貝一個字典
通過效果驗證可以得出結論就是以上兩種複製方式屬於淺拷貝
拋出問題: 爲什麼Python中大多數都是淺拷貝呢?
- 時間角度,淺拷貝花費時間更少
- 空間角度,淺拷貝花費內存更少
- 效率角度,淺拷貝只拷貝頂層數據,一般情況下比深拷貝效率高。
<2> copy和deepcopy
淺拷貝對不可變類型和可變類型的copy不同
- copy.copy對於可變類型,會進行淺拷貝
- copy.copy和copy.deepcopy對於不可變類型沒有意義,全部等價於對象之間的賦值操作。
In [88]: a = [11,22,33]
In [89]: b = copy.copy(a)
In [90]: id(a)
Out[90]: 59275144
In [91]: id(b)
Out[91]: 59525600
In [92]: a.append(44)
In [93]: a
Out[93]: [11, 22, 33, 44]
In [94]: b
Out[94]: [11, 22, 33]
In [95]: a = (11,22,33)
In [96]: b = copy.copy(a)
In [97]: id(a)
Out[97]: 58890680
In [98]: id(b)
Out[98]: 58890680
copy.copy和copy.deepcopy的區別
- copy.copy
- copy.deepcopy