# 深拷贝deepcopy、浅拷贝copy,深浅拷贝一般指可变类型,如set、list、dict,不可变类型不会被拷贝
import copy
v1 = 'JIM'
print(id(v1)) # 2522430013616
v2 = copy.copy(v1)
print(id(v2)) # 2522430013616
# 指向同一个内存地址
v3 = [11, 22, 33]
v4 = copy.copy(v3)
print(id(v3)) # 1811756668160
print(id(v4)) # 1811756768000
# 指向不同内存地址,拷贝的是列表,非列表里的数据,因列表里的数据均为不可变类型
print(id(v3[1])) # 1562372434896
print(id(v4[1])) # 1562372434896
# 只拷贝第一层列表,内部可变类型不会被拷贝
v5 = [11,22,33,[44,55,66]]
v6 = copy.copy(v5)
print(id(v5)) # 2543207734528
print(id(v6)) # 2543205121280
print(id(v5[1])) # 2543199349712
print(id(v6[1])) # 2543199349712
print(id(v5[3])) # 2543207734400
print(id(v6[3])) # 2543207734400
# 深拷贝
v7 = copy.deepcopy(v5)
print(id(v5)) # 2095331236416
print(id(v7)) # 2095323048912
print(id(v5[1])) # 2095323048912
print(id(v7[1])) # 2095323048912
print(id(v5[3])) # 2095331236928
print(id(v7[3])) # 2095328636864
# 特殊情况,元组
# 浅拷贝:永远不会被拷贝
# 深拷贝:元素均为不可变类型时,永远不会被拷贝;元素有可变类型时
v8 = (11,22,33)
v9 = (11,22,33,[55,66])
v10 = copy.copy(v8)
v11 = copy.deepcopy(v8)
v12 = copy.copy(v9)
v13 = copy.deepcopy(v9)
print(id(v8)) # 1651548425152
print(id(v9)) # 1651545441280
print(id(v10)) # 1651548425152
print(id(v11)) # 1651548425152
print(id(v12)) # 1651545441280
print(id(v13)) # 1651540645744
print(id(v9[3])) # 1651548378752
print(id(v13[3])) # 1651545767616