python deepcopy 丢失_python copy与deepcopy (拷贝与深拷贝)

copy与deepcopy

python 中的copy与deepcopy是内存数据的操作,但是两个函数有一定的区别。

1.copy

48304ba5e6f9fe08f3fa1abda7d326ab.png

import copy

list = [1, [4, 5, 6], 2, 3]

list1 = copy.copy(list)

print id(list)

print id(list[1])

print id(list1)

print id(list1[1])

list[2] = 100

list[1][0] = 44

print list

print list1

结果:

46925320

46912776

46967368

46912776

[1, [44, 5, 6], 100, 3]

[1, [44, 5, 6], 2, 3]

48304ba5e6f9fe08f3fa1abda7d326ab.png

经过copy操作的得两个list,list1拥有两个同的地址(46925320和46967368),修改list时不会影响list1的值,但是 list中间的子列表[4,5,6]在list和list1中有相同的地址46912776,所以在修改list中的子列表会影响到list1中的子列表。

2.deepcopy

48304ba5e6f9fe08f3fa1abda7d326ab.png

import copy

list = [1, [4, 5, 6], 2, 3]

list2 = copy.deepcopy(list)

print id(list)

print id(list[1])

print id(list2)

print id(list2[1])

list[2] = 100

list[1][0] = 44

print list

print list2

结果:

59508232

59495688

59509384

59508168

[1, [44, 5, 6], 100, 3]

[1, [4, 5, 6], 2, 3]

48304ba5e6f9fe08f3fa1abda7d326ab.png

经过deepcopy的list与list2用有不用的地址59508232,59509384,其中的子列表页拥有不同的地址, 所以不论怎样修改list都不用影响到list2。

结论:

经过copy操作的两个数据对象拥有不同的得地址空间 ,但是这个数据对象如果是内嵌了其他的复杂数据对象,这个内嵌的数据对象在

两个数据对象中拥有相同的地址空间,修改其中的值会互相印象。经过deepcopy的操作的不管是内层还是外层数据对象都拥有不同的地址空间,修改其中的值不会对两个对象都造成影响

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值