小尹学python

导航

Python:深拷贝和浅拷贝

#   深拷贝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

posted on 2021-10-30 21:10  小尹学python  阅读(147)  评论(0)    收藏  举报