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

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

  • 相关阅读:
    攻破JAVA NIO技术壁垒
    java8 ArrayList源码阅读
    Objective-C基础10 :代码块
    Objective-C基础9 :协议(@protocol)
    Objective-C基础8 : 类扩展(class extension)
    Objective-C基础7 :命名约定(naming conventions)
    Objective-C基础6 : 类别category
    Objective-C基础5 : 属性@property
    Objective-C基础4:对象初始化
    Foundation Kit常用类介绍
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/10009573.html
Copyright © 2011-2022 走看看