Python的奇怪行为';s deepcopy with update
因此,我尝试制作dict的深度副本,并使用一些附加数据对其进行更新(我不想更改我的原始dict): 但当我用另一种方式做的时候,它是有效的: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
>>> 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
不是你想象的那样。这是字面上的第一行:“returnNone
”我不知道你为什么会认为这很奇怪。似乎我做得太过分了。我很困惑,在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}