Python3中赋值浅拷贝和深拷贝

Posted bluepegasus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3中赋值浅拷贝和深拷贝相关的知识,希望对你有一定的参考价值。

一、Python3中赋值操作其实是对象的引用,相当于起了个别名。可以使用 id 函数验证

技术分享图片

二.、再来看看浅拷贝,list和dict中的copy方法,copy模块中的copy函数,都属于浅拷贝,即最外层对象完全复制一份,而内层对象只是引用(还是指向原来的内存地址)

技术分享图片     技术分享图片

三、最后是深拷贝,copy模块的deepcopy函数,即整个对象内外层统一在内存中拷贝了一份

技术分享图片

 

 四、通过id查看内存

技术分享图片

1、list_two和list_one是赋值关系,即整个内外层对象的引用,内外层都指向同一内存

技术分享图片 

2、list_three和list_one是通过列表的copy方法拷贝的,属于浅拷贝(外层对象完全拷贝,内层对象只是引用)

技术分享图片 内层对象只是引用,指向同一内存

3、list_four和list_one是通过copy.copy()函数拷贝的,也属于浅拷贝

技术分享图片 内层对象只是引用,指向同一内存

4、list_five和list_one是通过copy.deepcopy()函数拷贝的,属于深拷贝(内外层对象统一复制一份到新内存)

技术分享图片内层对象也拷贝了一份,内存地址不一样

 

总结:赋值和深拷贝是完全相反的(赋值是全引用,深拷贝是全拷贝), 自带的copy方法和模块的copy函数都是浅拷贝。

 

以上是关于Python3中赋值浅拷贝和深拷贝的主要内容,如果未能解决你的问题,请参考以下文章

Python中的赋值,浅拷贝和深拷贝的区别

c/c++/c++11 浅拷贝和深拷贝

Python 赋值浅拷贝和深拷贝

NumPy之浅拷贝和深拷贝

c++中的拷贝是怎么回事,请举例说明浅拷贝和深拷贝?

浅拷贝和深拷贝