Python copy与deepcopy 深度拷贝与浅拷贝

深度拷贝就是将原有对象在内存中完全复制一份,而浅拷贝就是为原有对象添加签名或者说别名,我们看一下如下的代码。

>>> list1 = [1,2,[3,4]]
>>> id(list1)
4360561608
>>> list2 = list1.copy()
>>> id(list2)
4360561224
>>> id(list1[0])
4297815072
>>> id(list2[0])
4297815072
>>> id(list1[2])
4360324232
>>> id(list2[2])
4360324232
>>> list1[0] = '0'
>>> list1
['0', 2, [3, 4]]
>>> list2
[1, 2, [3, 4]]
>>> id(list1[0])
4303066704
>>>list1[2].append()
>>>list1
['0',2,[3,4,5]]
>>>list2
[1,2,[3,4,5]]
>>>

通过以上代码我们不难发现,当copy一个集合对象时,例如list,是将list里的元素指针复制了一遍而已。比如如上例子存储集合元素指针的对象是新申请的(list2),但是list中的元素指针都是不变的,这样在改变原集合对象中可变对象(例如list)时另外一个对象会受到牵连。

而浅拷贝则是完完全全的复制,拷贝后的对象与原对象将没有任何关系。

>>> import copy
>>> list1 = [1,2,[3,4]]
>>> list2 = copy.deepcopy(list1)
>>> list1
[1, 2, [3, 4]]
>>> list2
[1, 2, [3, 4]]
>>> list1[2].append(5)
>>> list1
[1, 2, [3, 4, 5]]
>>> list2
[1, 2, [3, 4]]
>>> id(list1[2])
4345559368
>>> id(list2[2])
4345560712

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值