一、先来看看浅复制,list和dict中的copy方法,copy模块中的copy函数,都属于浅复制,即最外层对象完全复制一份,而内层对象只是引用(还是指向原来的内存地址)
二、然后是深复制,copy模块的deepcopy函数,即整个对象内外层统一在内存中拷贝了一份
三、Python3中赋值操作其实是对象的引用,相当于起了个别名。可以使用 id 函数验证
四、通过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函数都是浅复制(如果有问题的话关注小编给你解答哦~)
领取专属 10元无门槛券
私享最新 技术干货