Python中的深浅copy


在python中的深浅copy和其他语言中的不同,在c语言中,只要地址发生变化的都是深copy,地址不发生变化的都是浅copy。

但是在python中却不一样,在python中分两种情况来解释深浅copy。


第一种情况,当列表中不存在其他其他列表元素的时候,这个时候深copy和浅copy是相同的,都是创建一个地址,将所有的值放入其中,我们如果实验的话这个是都是创建新的地址,但是等到第二种情况下才是真正的python中深浅copy最大的区分。也是大家比较容易搞错的地方。


第二种情况:当copy的列表中含有其他列表元素的时候,这个时候深copy和浅copy就有极大的不同。

当其是浅copy时,创建了一个新的地址,对列表内所有的元素都复制,然而当遇到列表元素时,他只是引用原来的元组的地址,我们可以输出地址就可以明确的知道了,

但是当其是深copy时,也是创建了一个新的地址,对其列表内的元素都复制,当遇到列表元素时,这个时候它又创建了一个新的地址,将列表元素中的所有元素都复制了一遍,这个时候这个列表元素的地址也是一个新的地址。

from  copy import copy,deepcopy
a = [1,2,1,[1,2,1]]
b = a
print(a == b)
print(id(a),id(b))
print(a is b)

c = copy(a)
d = deepcopy(a)

print(a == c)
print(d == a)
print(a is c)
print(a is d)
print(id(a), id(c), id(d))
print(id(a[3]), id(c[3]), id(d[3]))

通过上边的代码块就可以看出其地址的不同,接下来再画个图,了解一下它。

这个是深copy模拟地址。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值