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
不是你想的那样。
所以我尝试对 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
不是你想的那样。