-
直接赋值:其实就是对象的引用(别名)。
-
浅拷贝(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 完全拷贝了父对象及其子对象,两者是完全独立的