浅拷贝与深拷贝

一. 浅拷贝
copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象。
浅拷贝与深拷贝
可变类型有: 列表、字典、集合

1.1可变类型的浅拷贝说明:

可变类型进行浅拷贝只对可变类型的第一层对象进行拷贝,对拷贝的对象会开辟新的内存空间进行存储,子对象不进行拷贝

不可变类型有: 数字、字符串、元组
1.2不可变类型的浅拷贝说明:
不可变类型进行浅拷贝不会给拷贝的对象开辟新的内存空间,而只是拷贝了这个对象的引用。

二 深拷贝
deepcopy函数是深拷贝, 只要发现对象有可变类型就会对该对象到最后一个可变类型的每一层对象就行拷贝, 对每一层拷贝的对象都会开辟新的内存空间进行存储。

2.1 可变类型的深拷贝
浅拷贝与深拷贝
可变类型的深拷贝说明:
可变类型进行深拷贝会对该对象到最后一个可变类型的每一层对象进行拷贝, 对每一层拷贝的对象都会开辟新的内存空间进行存储。

2.2 不可变类型的深拷贝
浅拷贝与深拷贝
不可变类型的深拷贝说明:
不可变类型进行深拷贝如果子对象没有可变类型则不会进行拷贝,而只是拷贝了这个对象的引用,否则会对该对象到最后一个可变类型的每一层对象就行拷贝, 对每一层拷贝的对象都会开辟新的内存空间进行存储

三 浅拷贝和深拷贝的区别是:
浅拷贝最多拷贝对象的一层,深拷贝可能拷贝对象的多层

不管是给对象进行深拷贝还是浅拷贝,只要拷贝成功就会开辟新的内存空间存储拷贝的对象