首页  >  文章  >  后端开发  >  Python 字典中的浅复制与深复制:'copy()”何时失败?

Python 字典中的浅复制与深复制:'copy()”何时失败?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-22 20:20:13193浏览

Shallow vs. Deep Copy in Python Dictionaries: When Does `copy()` Fail?

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}

复制操作类型:

  1. 引用赋值(a = b): 两个变量都指向同一个
  2. 浅复制 (b = a.copy()): 单独的对象,但底层数据是共享的。
  3. 深复制 (b = copy) .deepcopy(a)):完全隔离,具有不同的结构和值。

以上是Python 字典中的浅复制与深复制:'copy()”何时失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn