'''
深拷贝和浅拷贝
'''

import copy

a = 1
b = copy.copy(a) # 浅拷贝
c = copy.deepcopy(a) # 深拷贝
print(a is b)
print(a is c)
'''
>>> True
>>> True

不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值
'''

# copy
a = [1, 2, [3, 4]]
b = copy.copy(a)
print(a is b)
print(a[2] is b[2])
'''
>>> False
>>> True

浅拷贝只拷贝第一层,所以b拷贝出来的内存地址是与a不同的,
但因为浅拷贝只能拷贝第一层,所以b[2]这个列表拷贝不到,指向的内存地址仍然是a[2]的内存地址
'''

# deepcopy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
print(a is b)
print(a[2] is b[2])

'''
>>> False
>>> False

深拷贝对于可变的对象,全部拷贝下来,全部都开辟一片新的内存地址
'''