python 深浅拷贝总结

关于deepcopy和copy:

1)copy就是浅copy,意思是把对象a的所有内容,找到一个内存空间再存放一份,再赋值为新的变量。比如:

a=[1,2,3]
from copy import copy
cpy_a = copy(a)

此时cpya=[1,2,3],对cpy_a执行操作:cpy_a.append(4),会得到cpy_a=[1,2,3,4],a=[1,2,3],不会影响a的值。

注意区分:copy和赋值,赋值是简单的写了个别名,比如:

a=[1,2,3]
b=a

此时id(a)如果是6123L,那么id(b)也是6123L,两者的地址一样,只是名字不同,与浅copy是不一样的

2)deepcopy就是深拷贝,针对只含有值的对象来说,浅copy就可以满足,但如果一个对象中又含有其他对象,使用浅copy就只会把包含的id给复制一份,那么对新对象的内容的操作就会影响到旧对象的内容。此时就只能使用深copy,即递归查找引用对象,找到内存单元,拷贝内容并开辟内存空间,再存放一份。

a=[1,2]
b=[a,a]#这里是直接引用,就是对象包含对象,想拷贝只能使用深拷贝
from copy import deepcopy
c=deepcopy(b)

此时c=[[1,2],[1,2]]。执行c[0].append(3)此时c=[[1,2,3],[1,2,3]],b=[[1,2],[1,2]]不影响b的内容。

 

原文章链接:https://zhuanlan.zhihu.com/p/61904991

只是自己方便学习,不用于它用!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值