python - 字典解包运算符与 copy.deepcopy 之间的区别?

标签 python copy deep-copy

有时我需要深度复制一个对象,有时它是一个字典对象,所以我使用 ** 运算符来轻松复制它,但我一直想知道深度复制在某种意义上是否有任何不同或效率。 哪一个在内存占用、cpu 时间方面更有效,并且 deepcopy 是否像 ** 运算符那样迭代?

import copy
myObj = {"some": "data", "to": "copy"}

# With using unpacking operator.
newObj1 = {**myObj}

# With using `copy.deepcopy` function.
newObj2 = copy.deepcopy(myObj)

最佳答案

小心;当这些字典值可变时会有很大的不同,并且 ** 的行为与 copy.deepcopy() 不同:

>>> import copy
>>> myObj = {"some": "data", "to": ["copy", "this"]}
>>> newObj1 = {**myObj}
>>> newObj2 = copy.deepcopy(myObj)
>>> myObj["to"][1] = "that"
>>> newObj1
{'some': 'data', 'to': ['copy', 'that']}
>>> newObj2
{'some': 'data', 'to': ['copy', 'this']}

如图PEP 448 ,使用 ** 可迭代解包比 copy.deepcopy() 更类似于 dict.copy()

关于python - 字典解包运算符与 copy.deepcopy 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64878110/

相关文章:

Python 为什么 int ("0") 返回 false

python - 用任意参数替换 sympy 函数

php - 如何下载包含所有依赖项的 HTML 页面?

c++ - 在 C++ 中将对象传递给函数时的副作用

c++ - 复制构造函数(深复制)c++

javascript - 没有某些字段的深度克隆

python - Django Rest框架权限和所有权

python - 有没有办法动态创建跟踪,例如堆叠条形图?

xcode - 操作无法完成,因为发生了意外错误(错误代码 -8058)

linux - 将文件内容复制到其他位置