美文网首页
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