Python的奇怪行为';s deepcopy with update

Python的奇怪行为';s deepcopy with update,python,dictionary,deep-copy,Python,Dictionary,Deep Copy,因此,我尝试制作dict的深度副本,并使用一些附加数据对其进行更新(我不想更改我的原始dict): 但当我用另一种方式做的时候,它是有效的: >>> a = {1:1} >>> b = copy.deepcopy(a) >>> b.update({2:2}) >>> print(b) {1: 1, 2: 2} 当我在同一行上更新时,为什么Python将b变量设置为None 我还试着复制原文: >>> a

因此,我尝试制作dict的深度副本,并使用一些附加数据对其进行更新(我不想更改我的原始dict):

但当我用另一种方式做的时候,它是有效的:

>>> a = {1:1}
>>> b = copy.deepcopy(a)
>>> b.update({2:2})
>>> print(b)
{1: 1, 2: 2}
当我在同一行上更新时,为什么Python将
b
变量设置为
None

我还试着复制原文:

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


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

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

这是字面上的第一行:“return
None
”我不知道你为什么会认为这很奇怪。似乎我做得太过分了。我很困惑,在deepcopy方面寻找原因你的两个版本不一样-
b=copy.deepcopy(a).update({2:2})
变成
b=copy.deepcopy(a)
b=
b.update({2:2})
。这与
deepcopy
无关。我理解。这是因为我之前不知道
突变子返回None
。所以我认为
update
的行为就像
pop
。现在我知道了
>>> a = {1:1}
>>> a = copy.deepcopy(a)
>>> a
{1: 1}