美文网首页百人计划
Python浅拷贝与深拷贝

Python浅拷贝与深拷贝

作者: 霞姐时间管理 | 来源:发表于2017-09-07 06:58 被阅读65次

    一、引言—Python赋值

    例:

    注:

    1)id()函数用来查看对象的内存地址。

    2)a[4]是一个嵌套的列表。

    3)变量b与a的内存地址相同。

    Python赋值操作:

    赋值后新变量的内存地址并没有发生变化,Python中的赋值操作不会开辟新的内存空间,只是复制了新对象的引用。修改a值影响b值,修改b值影响a值。

    二、Python浅拷贝

    语法如下:

    import copy

    c=copy.copy(a)

    例:

    注:

    1)接上例。

    2)浅拷贝只是复制了对象的引用,内存地址发生变化。

    3)对象的元素地址相同,a和c理论上是两个对象,修改c值不会影响a值。

    4)浅拷贝只拷贝一层,对于嵌套的list,修改c值会影响a值。

    Python浅拷贝小结

    1、浅拷贝是对引用的拷贝,只拷贝父对象,所以上例中id(c)≠id(a)。

    2、对象内部的资源依然是引用,所以上例中id(a[0])=id(c[0]),id(a[4])=id(c[4])。

    3、如有嵌套元素,修改浅拷贝后的值,原始变量同时也被修改。

    三、Python深拷贝

    语法如下:

    d=copy.deepcopy(a)

    深拷贝拷贝了对象的所有元素,包括嵌套的元素,因此其时间和空间的开销更多一些。

    例:

    注:

    1)接上例。

    2)深拷贝是对对象资源的拷贝,id(d)≠id(a),内部id(d[0])=id(a[0]),id(d[4])≠id(a[4])

    3)深拷贝拷贝出来的对象是一个全新的对象,与原来的对象不再有任何关联。

    Python深拷贝小结:

    1、深拷贝是对对象资源的拷贝,它的id不等于原始对象的id。

    2、它的内部资源,如果没有嵌套,id相同;如果有嵌套,id不同。

    四、Python浅拷贝与深拷贝区别

    1、无论浅拷贝还是深拷贝,id(a[0])=id(c[0]),id(d[0])=id(a[0])。

    2、对于嵌套元素,如果是深拷贝,id会变,id(d[4])≠id(a[4];如果是浅拷贝,id不会变。


    后记:下一篇文章介绍Python深拷贝的应用。

    相关文章

      网友评论

        本文标题:Python浅拷贝与深拷贝

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