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

时间:2015-11-18 14:07:43

标签: python dictionary deep-copy

所以我尝试对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相关行为?

1 个答案:

答案 0 :(得分:1)

dict.update更新了您的字典,它不会返回它,因此b不是您认为的。