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

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

  • 相关阅读:
    [译]javascript中的条件语句
    [译]Javascript substring实例
    [译]Javasctipt中的substring
    [译]在Javascript中将string转化成numbers
    [译]Javascript基础
    [译]我们应该在HTML文档中何处放script标签
    [译]内联Javascript vs 外置Javascript
    [译]学习Javascript的工具
    MYSQL 重新设置自增值
    LINUX下的ssh登录之后的文件远程copy:scp命令(接前文ssh登录)
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/10009573.html
Copyright © 2011-2022 走看看