浅拷贝与深拷贝

在python中复制一个对象或者容器分为三种:

  下面的父对象和子对象个人理解 

    a = [1,2,3,4,[11,22,33]]
    a中的五个元素为a的父对象([11,22,33]此时是个整体)
    而11,22,33为a的子对象

 

  1.直接赋值:其实就是对象的引用(别名)。 

    b = a: 赋值引用,a 和 b 都指向同一个对象。

  

 

  2.浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

    b = a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)

    

 

  3.深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象

            也就是将原数据完全的复制和新建了一份,不管原数据的如何改变,这份数据也不会改变

    b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

 

 

 

 

 

    

 是否为同一对象验证

import copy
a = [1,2,3,[11,22]]
b = a
c = a.copy()
d = copy.deepcopy(a)

print('a的id为%d'%id(a))
print('b的id为%d'%id(b))
print('c的id为%d'%id(c))
print('d的id为%d'%id(d))

结果为:

a的id为91184712
b的id为91184712
c的id为91183560
d的id为91152904

 

实例:

import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
 
b = a                       #赋值,传对象的引用
c = copy.copy(a)            #对象拷贝,浅拷贝
d = copy.deepcopy(a)        #对象拷贝,深拷贝
 
a.append(5)                 #修改对象a
a[4].append('c')            #修改对象a中的['a', 'b']数组对象
 
print( 'a = ', a )
print( 'b = ', b )
print( 'c = ', c )
print( 'd = ', d )

结果为:

('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])
('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])
('d = ', [1, 2, 3, 4, ['a', 'b']])

 

参考:

  http://www.runoob.com/w3cnote/python-understanding-dict-copy-shallow-or-deep.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不止于python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值