python的深浅copy
可变数据类型:列表、字典、集合
不可变数据类型:数字、字符串、元祖
浅copy
改变原始对象中为可变类型的元素的值,会同时影响拷贝对象。
改变原始对象中为不可变类型的元素的值,不会响拷贝对象。
会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。
拷贝父对象,不会拷贝对象内部的子对象,会引用子对象.
浅拷贝拷贝程度低,只复制原数据的地址。其实是将副本的地址指向原数据地址。修改副本内容,是通过当前地址指向原数据地址,去修改。所以修改副本内容会影响到原数据内容。但是浅拷贝耗时短,占用内存空间少。
浅拷贝是使用copy.copy( )方法,是对拷贝对象中不可变对象的完全拷贝,如果拷贝对象中存在可变对象,那么可变对象发生变化后,拷贝得到的对象也会发生变化。
深copy
深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。
经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了.
会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。
copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
深拷贝拷贝程度高,将原数据复制到新的内存空间中。改变拷贝后的内容不影响原数据内容。但是深拷贝耗时长,且占用内存空间。
深拷贝是使用copy.deepcopy( )方法,不论拷贝对象中的数据类型是什么,拷贝到的对象都是独立的,不受原拷贝对象的影响,另一种描述就是说原拷贝对象发生变化也不会深拷贝出来的对象。