单层浅拷贝

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]))  # 内存地址相同

结论二:

总结:

浅拷贝:

深拷贝

03-03 09:18