python的深浅copy

可变数据类型:列表、字典、集合

不可变数据类型:数字、字符串、元祖

浅copy

改变原始对象中为可变类型的元素的值,会同时影响拷贝对象。
改变原始对象中为不可变类型的元素的值,不会响拷贝对象。

会在内存中新开辟一个空间,存放这个copy的列表,但是列表里面的内容还是沿用之前对象的内存地址。

拷贝父对象,不会拷贝对象内部的子对象,会引用子对象.

浅拷贝拷贝程度低,只复制原数据的地址。其实是将副本的地址指向原数据地址。修改副本内容,是通过当前地址指向原数据地址,去修改。所以修改副本内容会影响到原数据内容。但是浅拷贝耗时短,占用内存空间少。

浅拷贝是使用copy.copy( )方法,是对拷贝对象中不可变对象的完全拷贝,如果拷贝对象中存在可变对象,那么可变对象发生变化后,拷贝得到的对象也会发生变化。

深copy

深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。
经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了.

会在内存中开辟新空间,将原列表以及列表里面的可变数据类型重新创建一份,不可变数据类型则沿用之前的。

copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

深拷贝拷贝程度高,将原数据复制到新的内存空间中。改变拷贝后的内容不影响原数据内容。但是深拷贝耗时长,且占用内存空间。

深拷贝是使用copy.deepcopy( )方法,不论拷贝对象中的数据类型是什么,拷贝到的对象都是独立的,不受原拷贝对象的影响,另一种描述就是说原拷贝对象发生变化也不会深拷贝出来的对象。
posted @ 2022-11-14 17:24  张张包~  阅读(49)  评论(0编辑  收藏  举报