龍叔python-直接賦值,深拷貝,淺拷貝的簡單解析

龍叔18歲發表於2021-01-04

當你需要複製一個物件的時候,往往都是直接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歲

相關文章