龍叔python-直接賦值,深拷貝,淺拷貝的簡單解析
當你需要複製一個物件的時候,往往都是直接a=b,然而這只是簡單的直接賦值,並不適用一些特殊場景,你還需要了解淺拷貝和深拷貝
直接賦值:
b=a
淺拷貝:
b=a.copy()
深拷貝:
import copy
b = copy.deepcopy(a)
直接賦值
實驗1-操作父物件
程式碼:
a = [[0,1],2,3]
b = a
a.append(2)
print(a)
print(b)
結果:
實驗2-操作內部子物件
程式碼:
a = [[0,1],2,3]
b = a
a[0][1]=2
print(a)
print(b)
結果:
解析
從上可以看出,直接賦值,其實就是其實就是物件的引用(別名)。不論對a和b哪個變數做任何操作(操作父物件或者子物件),都會影響a和b的值
淺拷貝
實驗1-操作父物件
程式碼:
a = [[0,1],2,3]
b = a.copy()
a.append(2)
print(a)
print(b)
結果:
實驗2-操作內部子物件
程式碼:
a = [[0,1],2,3]
b = a.copy()
a[0][1]=2
print(a)
print(b)
結果:
解析
從上面可以看出淺拷貝只會拷貝父物件,不會拷貝物件的內部的子物件。對a的父物件做修改,不會影響b的,但是對a的子物件(子列表)做修改,b的子物件(子列表)也會被修改掉
深拷貝
實驗1-操作父物件
程式碼:
import copy
a = [[0,1],2,3]
b = copy.deepcopy(a)
a.append(2)
print(a)
print(b)
結果:
實驗2-操作內部子物件
程式碼:
import copy
a = [[0,1],2,3]
b = copy.deepcopy(a)
a[0][1]=2
print(a)
print(b)
結果:
解析
從上面可以看出深拷貝,copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。對a或者b的父物件或者子物件做修改,都不會影響另一個
推薦公眾號:龍叔18歲
相關文章
- 【Python】直接賦值,深拷貝和淺拷貝Python賦值
- 賦值、淺拷貝與深拷貝賦值
- 淺析賦值、淺拷貝、深拷貝的區別賦值
- js資料型別賦值,淺拷貝,深拷貝JS資料型別賦值
- Python - 物件賦值、淺拷貝、深拷貝的區別Python物件賦值
- javaScript深拷貝和淺拷貝簡單梳理JavaScript
- 深度解析深拷貝和淺拷貝
- vue深拷貝淺拷貝Vue
- 淺談深拷貝與淺拷貝?深拷貝幾種方法。
- python深拷貝和淺拷貝之簡單分析Python
- iOS深拷貝和淺拷貝iOS
- JS深拷貝與淺拷貝JS
- Java深拷貝和淺拷貝Java
- 物件深拷貝和淺拷貝物件
- javascript 淺拷貝VS深拷貝JavaScript
- JavaScript深拷貝和淺拷貝JavaScript
- js 淺拷貝和深拷貝JS
- js 深拷貝和淺拷貝JS
- JavaScript淺拷貝和深拷貝JavaScript
- js深拷貝和淺拷貝JS
- js 深拷貝 vs 淺拷貝JS
- js的深拷貝和淺拷貝JS
- 物件的深拷貝與淺拷貝物件
- 深拷貝和淺拷貝的簡要詳解
- 深入淺出深拷貝與淺拷貝
- 淺探js深拷貝和淺拷貝JS
- 【進階4-1期】詳細解析賦值、淺拷貝和深拷貝的區別賦值
- 深入淺出的“深拷貝與淺拷貝”
- java深克隆(深拷貝)和淺克隆(淺拷貝)Java
- python 指標拷貝,淺拷貝和深拷貝Python指標
- C++淺拷貝和深拷貝C++
- 深拷貝、淺拷貝與Cloneable介面
- 實現物件淺拷貝、深拷貝物件
- Python淺拷貝與深拷貝Python
- go slice深拷貝和淺拷貝Go
- JavaScript之深拷貝和淺拷貝JavaScript
- 聊聊物件深拷貝和淺拷貝物件
- ECMAScript-淺拷貝和深拷貝