什么是拷贝
相当于复制,修改了复制的文件信息,不会影响被复制文件的信息
什么是深拷贝
深拷贝会生成一个新的对象,也生成了一个新的“指向对象”;新生成的对象和被复制的对象分别独立,指向不同地址。即A————>[xx,yy,vv];B————>[xx,yy,vv]。
特点:
1.深拷贝后生成了新的一个赋值对象和一个指向对象。
2.两个赋值对象分别指向了两个不同的指向对象。
3.两个赋值对象没有改变前的“指向对象的内容是相同”(注意:相同不代表是同一个)的==,但却是不同 的两个指向对象 。
4.深拷贝完全拷贝了父对象及其子对象,两者是完全独立的,互不再影响
5.修改哪个对象,那么只影响被修改的对象,对另外一个不影响
例子
'''
import copy
a=[[90,95],(3,6),'sdf']
b=copy.deepcopy(a)
print("------修改前---------")
print(a,b)
print(id(a),id(b))
print("------修改后---------")
a[0].append(100)
print(a,b)
print(id(a),id(b))
'''
运行结果
image.png
什么是浅拷贝
浅拷贝会生成一个新的对象,新生成的对象和被复制的对象都指向同一个地址,即A————>[xx,yy,vv]<————B
特点:
1.不管被复制的对象是不可变的还是可变的,浅拷贝都会生成一个新的对象。
2.不管被复制的对象是不可变的还是可变的,如果直接修改对象,那么浅拷贝得到的对象都不会随之改变。
总结:浅拷贝后,如果直接修改对象,双方不会同步改变*。
例子
'''
import copy
A=[1,23,"shu",(2,8),{"name":"小张"}]
B=copy.copy(A)
print(B)
print(A)
print(id(B))
print(id(A))
'''
运行结果:image.png
相同点
无论深拷贝还是浅拷贝都会创建一个新对象。即:拷贝出来的对象的id不同。
不同点
浅拷贝:只拷贝了对象,对象内的元素并不会发生拷贝。
深拷贝:不仅拷贝对象,对象内的元素也会发生拷贝。
总结
1.浅拷贝拷贝可变的数据类型时,原数据改变,拷贝的数据也会发生改变;
2.深拷贝拷贝可变的数据类型时,原数据改变,拷贝的数据不会发生改变;
3.可变的数据类型使用深拷贝进行备份;
4.不可变的数据类型使用浅拷贝进行;