深copy和浅copy

浅拷贝时,拷贝出来的新对象的地址和原对象是不一样的,但是新对象里面的可变元素的地址原对象里的可变元素的地址是相同的。也就是说浅拷贝它拷贝的是浅层次的数据结构(不可变元素),对象里的可变元素作为深层次的数据结构并没有被拷贝到新地址里面去,而是和原对象里的可变元素指向同一个地址,所以在新对象或原对象里对这个可变元素做修改时,两个对象是同时改变的。
但是深拷贝不会这样,这个是浅拷贝相对于深拷贝最根本的区别 。
 
1、浅拷贝
使用copy模块里面的copy方法实现。
改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;
改变原始对象中为不可变类型的元素的值,不会响拷贝对象。
2、深拷贝
copy模块里面的deepcopy方法实现。
深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。
原始对象和拷贝对象所有可变元素地址都不一样了
3、总结
1,深浅拷贝都是对源对象的复制,占用不同的内存空间。
2,不可变类型的对象,对于深浅拷贝毫无影响,最终的地址值和值都是相等的。
3,可变类型的对象:值相等,地址不相等 。
posted @ 2020-05-23 19:58  xiaoqichaoren  阅读(384)  评论(0编辑  收藏  举报