码迷,mamicode.com
首页 > 编程语言 > 详细

Python3中赋值、浅拷贝和深拷贝

时间:2018-01-22 11:05:33      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:py函数   .com   总结   img   inf   验证   post   别名   bsp   

一、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中赋值、浅拷贝和深拷贝

标签:py函数   .com   总结   img   inf   验证   post   别名   bsp   

原文地址:https://www.cnblogs.com/BluePegasus/p/8327699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!