当我把一个字典分配给另一个变量时,为什么Python会更新两个字典?

22 浏览
0 Comments

当我把一个字典分配给另一个变量时,为什么Python会更新两个字典?

这个问题已经有答案了:

如何复制一个字典并仅编辑副本

Python中字典的深拷贝

在使用字典时如何避免以下问题

a={'b':1}
c=a
c.update({'b':2})
print a # {'b':2}
print c # {'b':2}

admin 更改状态以发布 2023年5月23日
0
0 Comments

显然,你的问题已经被解答了。但是纠正你的心理模型可能会有所帮助。\n\n在Python中,变量不是存储值,而是给值命名。查看这篇文章获取关于雕像指向旅馆的例子。\n\n检查你是否引用了同一对象的一种快速简单的方法是打印变量的ID: \n\n

>>> a = {}
>>> b = a
>>> print(id(a), id(b))
12345 12345

0
0 Comments

通过使用字典copy方法。像这样:

>>> a = {'b': 1}
>>> c = a.copy()
>>> c.update({'b': 2})
>>> print a
{'b': 1}
>>> print c
{'b': 2}
>>> 

请注意,这是一个浅复制。因此,如果您的字典中存在可变对象(字典、列表等),它将复制对这些对象的引用。在这种情况下,您应该使用copy.deepcopy。以下是示例:

>>> import copy
>>> a = {'b': {'g': 4}}
>>> c = copy.deepcopy(a)
>>> c['b'].update({'g': 15})
>>> print a
{'b': {'g': 4}}
>>> print c
{'b': {'g': 15}}

0