首页 > 编程语言 > 详细

python的浅复制与深复制

时间:2020-03-26 21:38:17      阅读:76      评论:0      收藏:0      [点我收藏+]

简单一点吧,太长了看不下去。。。。

copy.copy:浅拷贝,只拷贝父元素,不会拷贝子元素(的引用)。
copy.deepcopy: 深拷贝,拷贝父元素及其子元素(的引用)。

或许,例子更快一些:

import copy

s1 = [1, 2, 3, [4, 5], 666]
print(s1)

s2 = s1  #直接传递引用(可以看做传递的是地址)
print(s2)

s3 = copy.copy(s1)  #浅复制
print(s3)

s4 = copy.deepcopy(s1)  #深复制
print(s4)

技术分享图片

很明显这四个值都是一样的。。。

那么,当修改S1的值呢?

# 修改s1的值
s1.append(gogogo!)
print(s1)
print(s2)
print(s3)
print(s4)

技术分享图片

咦,是不是跟想象的不太一样?

那么再修改S1的子元素呢

# 修改s1的子元素值
s1[3].append(hello)
print(s1)
print(s2)
print(s3)   #为什么呢? 可以看做浅复制拷贝的是子元素的地址(引用),当子元素里面的值改变时,由于子元素地址并没有变,于是浅复制得到的值也被改变了
print(s4)   #而深复制连子元素的内部值的地址也拷贝了

技术分享图片

现在是不是如你所愿了。。。

 

查看元素地址 id函数

print(id(s3[3]))
print(id(s1[3]))

 

##

参考:

https://www.jb51.net/article/15714.htm

python的浅复制与深复制

原文:https://www.cnblogs.com/qi-yuan-008/p/12577422.html

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