# 浅copy
# 把源列表第一层的内存地址copy给新列表
list1 = [111, 222, ["aaa", "bbb"]]
list3 = list1.copy()
print(id(list1[0]), id(list1[1]), id(list1[2])) # 2676636210992 2676636214608 2676639681600
print(id(list3[0]), id(list3[1]), id(list3[2])) # 2676636210992 2676636214608 2676639681600
list1[0] = 444
list1[2][0] = "ccc"
print(list1) # [444, 222, ['ccc', 'bbb']]
print(list3) # [111, 222, ['ccc', 'bbb']]
print(id(list1[0]), id(list1[1]), id(list1[2])) # 2676639284304 2676636214608 2676639681600
print(id(list3[0]), id(list3[1]), id(list3[2])) # 2676636210992 2676636214608 2676639681600
# 深copy
# 可以区分可变类型与不可变类型的copy机制
import copy
list1 = [111, 222, ["aaa", "bbb"]]
list3 = copy.deepcopy(list1)
# 可变类型内存地址不同
print(id(list1)) # 1808474590912
print(id(list3)) # 1808474589120
# 不可变类型内存地址相同,可变类型内存地址不同
print(id(list1[0]), id(list1[1]), id(list1[2])) # 1808466532144 1808466535760 1808474589952
print(id(list3[0]), id(list3[1]), id(list3[2])) # 1808466532144 1808466535760 1808474591616
# 不可变类型内存地址相同
print(id(list1[2][0]), id(list1[2][1])) # 1808467337392 1808472155120
print(id(list3[2][0]), id(list3[2][1])) # 1808467337392 1808472155120