• [Python]Python中的浅复制与深复制


    看python的文档,发现list有copy方法,描述说效果同a[:]. 感觉有点惊讶,之前一直以为a[:]执行的是深复制。

    test了一下,发现确实如果a中存在可变对象,如list/set/dict等,则对原对象的修改,会影响到copy过来的值。

    a = [{1,2,3}, 1,2]
    b = a[:]
    # 修改不可变对象
    a[2] = 3
    a # > [{1, 2, 3}, 1, 3]
    b # > [{1, 2, 3}, 1, 2]
    # 修改可变对象
    a[0].add(4)
    a # > [{1, 2, 3, 4}, 1, 3]
    b # > [{1, 2, 3, 4}, 1, 2]

    深复制/浅复制的说明可以参考这里:http://www.cnblogs.com/wilber2013/p/4645353.html

    只看总结:

    本文介绍了对象的赋值和拷贝,以及它们之间的差异:
    
    Python中对象的赋值都是进行对象引用(内存地址)传递
    使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用.
    如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝
    对于非容器类型(如数字、字符串、和其他'原子'类型的对象)没有被拷贝一说
    如果元祖变量只包含原子类型对象,则不能深拷贝,看下面的例子
  • 相关阅读:
    土木工程材料0732
    07 具有无关项的逻辑函数及其化简
    06 逻辑函数化简法
    AD中板子挖孔开槽
    电容式触摸按键原理
    LTspice
    三相电
    7、简单电阻容元件模型的创建
    cadence17.4在笔记本下设置菜单显示不全的解决办法
    36. 二叉搜索树与双向链表
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/9453244.html
Copyright © 2020-2023  润新知