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

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

  • 相关阅读:
    关于TxQBService报的错,腾讯你真牛B啊
    用C#读取txt文件的方法
    Python-Redis的发布与订阅
    Python-连接Redis并操作
    Python-Redis的Set操作
    Python-Redis的List操作
    Python-Redis的Hash操作
    Python-Redis的String操作
    Python-RabbitMQ消息队列实现rpc
    Python-RabbitMQ消息队列的发布与订阅
  • 原文地址:https://www.cnblogs.com/ConnorShip/p/10009573.html
Copyright © 2011-2022 走看看