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

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

转载于:https://www.cnblogs.com/ConnorShip/p/10009573.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值