zoukankan      html  css  js  c++  java
  • Python里面如何拷贝一个对象

    1.赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。

    In [168]: a
    Out[168]: [1, 2, 3]
    
    In [169]: b=a
    
    In [170]: a.append(4)
    
    In [171]: a
    Out[171]: [1, 2, 3, 4]
    
    In [172]: b
    Out[172]: [1, 2, 3, 4]

    2.浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(copy模块的copy()函数)

     

    In [187]: import copy#copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
    
    In [188]: a=[1,2,3,4,['a','b']]
    
    In [189]: c=copy.copy(a)
    
    In [190]: a.append(5)
    
    In [191]: a
    Out[191]: [1, 2, 3, 4, ['a', 'b'], 5]
    
    In [192]: c
    Out[192]: [1, 2, 3, 4, ['a', 'b']]
    
    In [193]: a[4].append('c')
    
    In [194]: a
    Out[194]: [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    
    In [195]: c
    Out[195]: [1, 2, 3, 4, ['a', 'b', 'c']]

    3.深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变)(copy模块的deep.deepcopy()函数)

    In [196]: import copy
    
    In [197]: a=[1,2,3,4,['a','b']]
    
    In [198]: c=copy.deepcopy(a)
    
    In [199]: a.append(5)
    
    In [200]: a
    Out[200]: [1, 2, 3, 4, ['a', 'b'], 5]
    
    In [201]: c
    Out[201]: [1, 2, 3, 4, ['a', 'b']]
    
    In [202]: a[4].append('c')
    
    In [203]: a
    Out[203]: [1, 2, 3, 4, ['a', 'b', 'c'], 5]
    
    In [204]: c
    Out[204]: [1, 2, 3, 4, ['a', 'b']]

    综上所述,浅copy和深copy:

      copy浅拷贝(copy.copy()),没有拷贝子对象,所以原始数据改变,子对象会改变

           深copy的相同在于(copy.deepcopy()),包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

           它们的相同之处是,父对象都没有改变!

  • 相关阅读:
    Windows 经典DOS命令大全
    Linux常用命令大全(全面)
    Nova 实现的 Fit Instance NUMA to Host NUMA 算法
    计算机组成原理 — 冯诺依曼体系结构
    计算机组成的基本硬件设备
    OpenStack 高性能虚拟机之大页内存
    Ironic 的 Rescue 救援模式实现流程
    SQLite 版本引发的 Python 程序调用问题
    Ceph 故障修复记录(持续更新)
    注册 Ironic 裸金属节点并部署裸金属实例
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/10009573.html
Copyright © 2011-2022 走看看