import copy
a = [11, 22, 33]
b = [44, 55, 66]
# c = [a, b] # 如果被拷贝对象是可变类型时
c = (a, b) # 如果被拷贝对象是不可变类型时
d = copy.deepcopy(c)
print(id(c)) # 2791002657280
print(id(d)) # 2791002658240
a.append(100)
print(c) # [[11, 22, 33, 100], [44, 55, 66]]
print(d) #[[11, 22, 33], [44, 55, 66]]
# python的深拷贝是具有递归性质的值拷贝,即并不是对内存中已存在对象的引用,而是重新申请内存创建了对象,而且无论几层都是如此。
# 而且深拷贝不会受被拷贝对象是否是可变类型的影响
'''
d = copy.copy(c)
print(id(c)) # 1350589272768
print(id(d)) # 1350589273728
a.append(100)
print(c) # [[11, 22, 33, 100], [44, 55, 66]]
print(d) # [[11, 22, 33, 100], [44, 55, 66]]
# python的浅拷贝不具有递归性质,只会对第一层进行值拷贝,内层数据仍是对原对象的引用
'''
'''
d = copy.copy(c)
print(id(c)) # 1625211654336
print(id(d)) # 1625211654336
# 当c是不可变类型时(此处使用的是元祖)使用copy进行浅拷贝将指向原对象的引用,即第一层都不能进行值拷贝
a.append(100)
print(c) # ([11, 22, 33, 100], [44, 55, 66])
print(d) # ([11, 22, 33, 100], [44, 55, 66])
'''