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()),包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

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

  • 相关阅读:
    Linux Shell 用法
    gdb调试用法
    grep 用法总结
    Cmake用法
    Win64/Linux 上PyMouse安装
    两道拓扑排序的问题
    hiho一下第76周《Suzhou Adventure》
    这类问题需要利用二进制的特殊性
    这种题应该诸位处理
    两道人数多,课程少,query多的题
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/10009573.html
Copyright © 2011-2022 走看看