前言
深拷贝和浅拷贝都是对象的拷贝,本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别。
可变对象:直接在对象所指的地址上把值改了,这个对象依然指向这个地址。
不可变对象:一个对象所指向的地址上的值是不能修改的,如果修改了这个对象的值,它所指向的地址就改变了。
深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象
浅拷贝,原对象的list元素改变的话会改变当前对象,如果当前对象中list元素改变了,也同样会影响原对象。
深浅拷贝
1.概念
浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
>>>a = {1: [1,2,3]}
>>> b = a.copy()
# b=a 直接赋值:其实就是对象的引用(别名),与 b = a.copy()是同一个作用
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})
1.b = a: 赋值引用,a 和 b 都指向同一个对象。
2.b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
3.b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的
上面原文链接:https://blog.csdn.net/Y57657/article/details/121572983?spm=1001.2014.3001.5501
写的还可行,兄弟们可以去多多查阅他写的