美文网首页
4.浅拷贝与深拷贝

4.浅拷贝与深拷贝

作者: 辉神来了 | 来源:发表于2019-06-22 16:48 被阅读0次

可变(mutable)参数和不可变(immutable)参数

在Python中string、tuple和number是不可变对象,而dict、list等是可变对象;不可变对象在进行重新赋值的时候,实际上市将原始值丢弃,将变量指向一个新值,可变对象的可变实质上是指更改可变对象中的子对象,比如list中的item元素的更改

直接赋值:其实就是对象的引用(别名)


image.png
image.png

浅拷贝

不拷贝子对象(针对子对象中的item),当子对象进行更改的时候,原始对象也会改变,常见操作,字典的copy()函数、copy模块的copy()函数(两个一模一样)


image.png

深拷贝

会拷贝子对象,当原始对象子对象进行更改的时候,原始对象不会改变
常见操作:copy()模块的deepcopy()函数


image.png

总结

  • 利用切片操作和list方法拷贝等就叫浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已
  • 利用copy中的deepcopy方法进行拷贝就叫做深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用
  • 但是对于数字,字符串和元祖类型对象,没有拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是创建一个对象,替换掉旧的而已

相关文章

网友评论

      本文标题:4.浅拷贝与深拷贝

      本文链接:https://www.haomeiwen.com/subject/cqdvqctx.html