python的浅复制与深复制

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

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

posted on 2020-03-26 21:18  落日峡谷  阅读(144)  评论(0编辑  收藏  举报

导航