python直接賦值、淺拷貝和深度拷貝
阿新 • • 發佈:2020-11-29
-
直接賦值:其實就是物件的引用(別名)。
-
淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。
-
深拷貝(deepcopy):copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。
一、字典淺拷貝
a = {1:[1,2,3]} b = a.copy() print("a:",a) # 輸出:a: {1: [1, 2, 3]} print("b:",b) # 輸出:b: {1: [1, 2, 3]} a[1].append(4) print("a:",a) # 輸出:a: {1: [1, 2, 3,4]} print("b:",b) #輸出:b: {1: [1, 2, 3,4]}
二、深度拷貝
深度拷貝需要引入copy模組
import copy a = {1:[1,2,3]} c = copy.deepcopy(a) print("a:",a) # 輸出:a: {1: [1, 2, 3]} print("c:",c) # 輸出:b: {1: [1, 2, 3]} a[1].append(5) print("a:",a) # 輸出:a: {1: [1, 2, 3,5]} print("c:",c) # 輸出:b: {1: [1, 2, 3]}
三、說明
1、b = a :賦值引用,a 和 b 都指向一個值;
2、b = a.copy() : 淺拷貝,a 和 b 是一個獨立的物件,但他們的子物件還是指向同意物件(是引用)。
3、b = copy.deepcopy(a) : 深度拷貝,a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的