首页 > 编程语言 > 详细

python深浅拷贝

时间:2021-05-10 20:02:47      阅读:14      评论:0      收藏:0      [点我收藏+]

浅拷贝copy

深拷贝deepcopy

浅拷贝copy

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

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

print(a)     # 此时a的结果为[1,2,3]
print(cpy_a)  # 此时cpy_a的结果为[1,2,3]

# 这一步是对cpy_a进行操作
cpy_a.append(4)

# 接下来输出a和cpy_a的结果,看对cpy_a的操作是否会影响到a的值
print(a)    # 此时a的结果为[1,2,3]
print(cpy_a)  # 此时cpy_a的结果为[1,2,3,4] 

  

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

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

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

深拷贝deepcopy

  针对只含有值的对象来说,浅copy就可以满足,但如果一个对象中又含有其他对象,使用浅copy就只会把包含的id给

复制一份,那么对新对象的内容的操作就会影响到旧对象的内容。此时就只能使用深拷贝deepcopy,即递归查找引用对象,找到内存单元,拷贝内容并开辟内存空间,再存放一份。

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

print(b)  # 此时b的结果为[[1,2],[1,2]]
print(dcpy_b)  # 此时c的结果为[[1,2],[1,2]]

# 对dcpy_b进行操作
dcpy_b[0].append(3)
# 接下来输出b和dcpy_b的结果
print(b)  # 此时b的结果为[[1,2],[1,2]]
print(dcpy_b)  # 此时dcpy_b的结果为[[1,2,3],[1,2,3]]

对深拷贝deepcopy后的内容(dcpy_b)做修改不会影响到原内容(b)。

python深浅拷贝

原文:https://www.cnblogs.com/liya1014/p/14751554.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!