Python中的深浅copy


在python中的深浅copy和其他语言中的不同,在c语言中,只要地址发生变化的都是深copy,地址不发生变化的都是浅copy。

但是在python中却不一样,在python中分两种情况来解释深浅copy。


第一种情况,当列表中不存在其他其他列表元素的时候,这个时候深copy和浅copy是相同的,都是创建一个地址,将所有的值放入其中,我们如果实验的话这个是都是创建新的地址,但是等到第二种情况下才是真正的python中深浅copy最大的区分。也是大家比较容易搞错的地方。


第二种情况:当copy的列表中含有其他列表元素的时候,这个时候深copy和浅copy就有极大的不同。

当其是浅copy时,创建了一个新的地址,对列表内所有的元素都复制,然而当遇到列表元素时,他只是引用原来的元组的地址,我们可以输出地址就可以明确的知道了,

但是当其是深copy时,也是创建了一个新的地址,对其列表内的元素都复制,当遇到列表元素时,这个时候它又创建了一个新的地址,将列表元素中的所有元素都复制了一遍,这个时候这个列表元素的地址也是一个新的地址。

from  copy import copy,deepcopy
a = [1,2,1,[1,2,1]]
b = a
print(a == b)
print(id(a),id(b))
print(a is b)

c = copy(a)
d = deepcopy(a)

print(a == c)
print(d == a)
print(a is c)
print(a is d)
print(id(a), id(c), id(d))
print(id(a[3]), id(c[3]), id(d[3]))

通过上边的代码块就可以看出其地址的不同,接下来再画个图,了解一下它。

这个是深copy模拟地址。

扫描二维码关注公众号,回复: 2570048 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_37235798/article/details/81410996