zoukankan      html  css  js  c++  java
  • Python模块-copy

    copy模块之浅拷贝与深拷贝

    copy模块用于对象的拷贝操作。该模块只提供了两个主要的方法:copy.copy与copy.deepcopy,分别表示浅复制与深复制。

    直接赋值,深拷贝和浅拷贝的区别

    直接赋值:简单地拷贝对象的引用,两个对象的id相同。就是对象的引用(别名),就是给当前内存中的对象增加一个“标签”而已。通过使用内置函数 id() ,可以看出指向内存中同一个对象。

    浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。即浅复制只复制对象本身,没有复制该对象所引用的对象。A shallow copy constructs a new compound object and then (to the extentpossible) inserts references into it to the objects found in the original.

    深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。即创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象与原对象没有任何关联。虽然实际上会共享不可变的子对象,但不影响它们的相互独立性。A deep copy constructs a new compound object and then, recursively, insertscopies into it of the objects found in the original.

    浅拷贝和深拷贝的不同仅仅是对组合对象来说,所谓的组合对象就是包含了其它对象的对象,如列表,类实例。而对于数字、字符串以及其它“原子”类型,没有拷贝一说,产生的都是原对象的引用,所以两者就是一样的结果了。

    import copy
    
    a = [1, [1, 2, 3]]
    b = a #直接复制
    c = copy.copy(a) #浅拷贝
    d = copy.deepcopy(a) #深拷贝
    
    a[0] = 2
    a[1][0] = 2
    print('a', a)
    print('b', b)
    print('c', c)
    print('d', d)

    log:

    a [2, [2, 2, 3]]
    b [2, [2, 2, 3]]
    c [1, [2, 2, 3]]
    d [1, [1, 2, 3]]
  • 相关阅读:
    eclipse插件
    01 vue入门
    jrebel
    html5,css3炫酷实例-元素
    css文字实例锦集
    海外短信故障已经恢复
    证实海外(含港澳台)短信业务故障
    预计维护时间将延长
    黑龙江地区电信运营商业务中断
    正在进行计划中的停机维护
  • 原文地址:https://www.cnblogs.com/keqipu/p/7228516.html
Copyright © 2011-2022 走看看