深浅拷贝
Posted aaron-zhou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深浅拷贝相关的知识,希望对你有一定的参考价值。
1. 整型、字符串和布尔类型的深浅拷贝
import copy
a = 'Aaron'
b = copy.copy(a) # 浅拷贝
c = copy.deepcopy(a) # 深拷贝
# 注意:对于简单的不可变类型(int、str、bool),浅拷贝和深拷贝是一样的。
2. 列表、集合和字典的深浅拷贝
import copy
a = [1, 2, [3, 4], 5]
b = copy.copy(a) # 浅拷贝,只是将a的最外层地址拷贝一份。
c = copy.deepcopy(a) # 深拷贝,将a的地址和它包含的所有可变类型的地址都拷贝一份(此处就拷贝了a的地址和其中元素[3, 4]的地址。
print(id(a), id(b), id(c))
print('==='*15)
print(id(a[1]), id(b[1]), id(c[1]))
print('==='*15)
print(id(a[2]), id(b[2]), id(c[2]))
# 输出结果
66748936 66921096 66921160
=============================================
8790802010976 8790802010976 8790802010976
=============================================
66823752 66823752 66920840
3. 元组的深浅拷贝
import copy
print('元组元素包含可变类型:
')
a1 = (1, 2, [3, 4], 5)
b1 = copy.copy(a1) # 浅拷贝,和a原来的地址一样,不进行拷贝。
c1 = copy.deepcopy(a1) # 深拷贝,a的元素包含可变类型,将a的地址和它包含的所有可变类型的地址都拷贝一份(此处就拷贝了a的地址和其中元素[3, 4]的地址。
print(id(a1), id(b1), id(c1))
print('==='*15)
print(id(a1[1]), id(b1[1]), id(c1[1]))
print('==='*15)
print(id(a1[2]), id(b1[2]), id(c1[2]))
print('
元组元素不包含可变类型:
')
a2 = (1, 2, 3, 4, 5)
b2 = copy.copy(a2) # 浅拷贝,和a原来的地址一样,不进行拷贝。
c2 = copy.deepcopy(a2) # 深拷贝,a的元素为不可变类型,和a原来的地址一样,不进行拷贝。
print(id(a2), id(b2), id(c2))
print('==='*15)
print(id(a2[1]), id(b2[1]), id(c2[1]))
print('==='*15)
print(id(a2[2]), id(b2[2]), id(c2[2]))
# 输出结果
元组元素包含可变类型:
57627496 57627496 57981672
=============================================
8790802010976 8790802010976 8790802010976
=============================================
66627464 66627464 66724552
元组元素不包含可变类型:
57697824 57697824 57697824
=============================================
8790802010976 8790802010976 8790802010976
=============================================
8790802011008 8790802011008 8790802011008
以上是关于深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章