提问:Python中经常需要复制一个对象,那么常用的复制方式有哪些?
回答:=
直接赋值,copy
浅拷贝,deepcopy
深拷贝
序号 | 表示 | 区别 | 说明 | 条件 |
---|---|---|---|---|
1 | = | 赋值 | 其实就是对象的引用,对象共享(别名-猫也叫咪咪、照镜子)。 | |
2 | copy() | 浅拷贝 | 拷贝父对象,不会拷贝对象的内部的子对象。 | |
3 | deepcopy() | 深拷贝 | 完全拷贝了父对象及其子对象。 | import copy |
举例1:通过不同方式复制字典
代码:
import copy
dic = {'list': [1,2,3] }
dic1 = dic # 赋值 传对象的引用
dic2 = dic.copy() #浅拷贝 ,对象拷贝
dic3 = copy.deepcopy(dic) #深拷贝 ,对象拷贝
dic['list'].remove(3)
print(dic)
print(dic1) #= 赋值 :指向同一个对象,照镜子
print(dic2) #浅拷贝 :父对象完全独立,子对象共享用
print(dic3) #深拷贝: 完全拷贝父子对象 完全独立对象 不受影响
运行结果:
原字典 : {'list': [1, 2]}
直接赋值= : {'list': [1, 2]}
浅拷贝copy : {'list': [1, 2]}
深拷贝deepcopy : {'list': [1, 2, 3]}
分析:
dic1 = dic
=
赋值引用- dic 和 dic1 都指向同一个对象(共享)
dic2 = dic.copy()
copy()
浅拷贝- dic 和 dic2 是一个独立的对象,但他们的子对象还是指向统一对象(是引用、共享)。
dic3 = copy.deepcopy(dic):
deepcopy()
深拷贝,- dic 和 dic2 完全拷贝了父对象及其子对象,两者是完全独立的。