Python 中的浅拷贝与深拷贝:了解对字典的影响
Python 中字典的浅拷贝,使用 dict 创建.copy(),可能不会按预期更新原始字典。这种行为源于浅复制与深复制的概念。
什么是浅复制?
在浅复制中,引用的是字典的内容,而不是比按值复制。这意味着原始字典和复制的字典都指向相同的底层数据结构。
演示:
>> original = dict(a=1, b=2) >> new = original.copy() >> new.update({'c': 3}) >> original {'a': 1, 'b': 2}
与预期相反,原始字典保持不变浅拷贝更新后。这是因为对数据的引用是共享的,而不是复制的。
列表有何不同:
与字典不同,浅复制列表确实会导致对数据的共享引用数据。这是因为列表通过引用包含值。
>> original = [1, 2, 3] >> new = original >> new.append(4) >> new, original ([1, 2, 3, 4], [1, 2, 3, 4])
在这种情况下,原始列表和新列表都引用相同的数据,因此对一个列表所做的更改会影响另一个列表。
使用 copy.deepcopy() 进行深度复制
要创建字典的真正不同的副本,包括其内容,必须使用 copy.deepcopy() 。此函数按值复制结构和值,确保完全隔离。
import copy >> original = dict(a=1, b=2) >> new = copy.deepcopy(original) >> new.update({'c': 3}) >> original {'a': 1, 'b': 2} >> new {'a': 1, 'c': 3, 'b': 2}
复制操作类型:
以上是Python 字典中的浅复制与深复制:'copy()”何时失败?的详细内容。更多信息请关注PHP中文网其他相关文章!