zoukankan      html  css  js  c++  java
  • [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()进行深拷贝
    对于非容器类型(如数字、字符串、和其他'原子'类型的对象)没有被拷贝一说
    如果元祖变量只包含原子类型对象,则不能深拷贝,看下面的例子
  • 相关阅读:
    OFBiz:初始RequestHandler
    OFBiz:添加样式【转】
    OFBiz:配置过程
    OFBiz:component-load.xml
    OFBiz:组件装入位置
    OFBiz:添加实体栏位
    OFBiz:扩展controller.xml
    Adminer
    定制ADempiere(1)- 会议记录
    OpenResty 通过二级域名做跳转
  • 原文地址:https://www.cnblogs.com/oDoraemon/p/9453244.html
Copyright © 2011-2022 走看看