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

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

猜你喜欢

转载自blog.csdn.net/weixin_44683255/article/details/111830867