单层浅拷贝
import copy
a = 1 # 不可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a)) # 内存地址相同
a = [1,2] # 可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a)) # 内存地址不相同
单层深拷贝
import copy
a = 1 # 不可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a)) # 内存地址相同
a = [1,2] # 可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a)) # 内存地址不相同
结论一:
浅拷贝嵌套
# -----------不可变数据类型---------
# 情况一,内嵌可变数据类型
import copy
a = ([1,2],(3,4)) # 不可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a)) # 内存地址相同
# 情况二,内嵌不可变数据类型
a = ((1,2),(3,4)) # 不可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a)) # 内存地址相同
#-----------可变数据类型-------------
# 情况一,内嵌可变数据类型
import copy
a = [(1,2),[3,4]] # 可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a)) # 内存地址不相同
# 情况一, 可变数据类型 内嵌可变数据类型
import copy
a = [(1,2),(3,4)] # 可变数据类型
copy_a = copy.copy(a)
print(id(a),id(copy_a)) # 内存地址不相同
深拷贝嵌套
# -----------不可变数据类型---------
# 情况一,内嵌可变数据类型
import copy
a = ([1,2],(3,4)) # 不可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a)) # 内存地址不相同
# 情况二,内嵌不可变数据类型
a = ((1,2),(3,4)) # 不可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a)) # 内存地址相同
#-----------可变数据类型-------------
# 情况一,内嵌可变数据类型
import copy
a = [(1,2),[3,4]] # 可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a)) # 内存地址不相同
print(id(a[0]),id(copy_a[0])) # 内存地址相同
print(id(a[1]),id(copy_a[1])) # 内存地址不相同
# 情况一, 可变数据类型 内嵌可变数据类型
import copy
a = [(1,2),(3,4)] # 可变数据类型
copy_a = copy.deepcopy(a)
print(id(a),id(copy_a)) # 内存地址不相同
print(id(a[0]),id(copy_a[0])) # 内存地址相同
结论二:
总结:
浅拷贝:
深拷贝: