Python 的深度复制与更新的奇怪行为

Strange behavior of Python's deepcopy with update

所以我尝试对 dict 进行深层复制并用一些额外的数据更新它(我不想更改我原来的 dict):

>>> a = {1:1}
>>> print(a)
{1: 1}
>>> b = copy.deepcopy(a).update({2:2})
>>> print(b)
None

但是当我以另一种方式进行时,它起作用了:

>>> a = {1:1}
>>> b = copy.deepcopy(a)
>>> b.update({2:2})
>>> print(b)
{1: 1, 2: 2}

当我在同一行更新时,为什么 Python 将 b 变量设置为 None

我也尝试对原始字典进行深度复制:

>>> a = {1:1}
>>> a = copy.deepcopy(a).update({2:2})
>>> print(a)
None

但是:

>>> a = {1:1}
>>> a = copy.deepcopy(a)
>>> a
{1: 1}

所以这是 dict.update 问题?或者可能是 CPython 相关的行为?

dict.update 更新你的字典,它不会 return 所以 b 不是你想的那样。