copy() 和 deepcopy() 的区别
copy和deepcopy的区别:
模块导入:
from copy import copy, deepcopy
- copy
- 使用copy()函数复制的变量和原数据的标识符不同;
- 但是其中可变数据类型是相通的(包括list、dict、set),原数据和复制后的数据一变俱变;
- 不可变数据类型(字符串、元组等)不相通,示例如下
a = {"x": [1, 2, 3, 4], "u": "hello"}
b = copy(a)
b["x"][1] = 10
b["u"] = "world"
print(id(a) == id(b))
print("a: ", a)
print("b: ", b)
False
a: {'x': [1, 10, 3, 4], 'u': "hello"}
b: {'x': [1, 10, 3, 4], 'u': "world"}
id(object)
返回对象的唯一标识符,标识符是个唯一的整数
- deepcopy
- 使用deepcopy()函数复制的变量和原数据的标识符不同;
- 原数据和复制后的数据没有任何关联,互不干扰
a = {"x": [1, 2, 3, 4], "u": "hello"}
b = deepcopy(a)
b["x"][1] = 10
b["u"] = "world"
print(id(a) == id(b))
print("a: ", a)
print("b: ", b)
False
a: {'x': [1, 2, 3, 4], 'u': "hello"}
b: {'x': [1, 10, 3, 4], 'u': "world"}