在使用字典时如何避免以下问题
a={'b':1}
c=a
c.update({'b':2})
print a # {'b':2}
print c # {'b':2}
在使用字典时如何避免以下问题
a={'b':1}
c=a
c.update({'b':2})
print a # {'b':2}
print c # {'b':2}
通过使用字典的copy
方法。就像这样:
>>> a = {'b': 1}
>>> c = a.copy()
>>> c.update({'b': 2})
>>> print a
{'b': 1}
>>> print c
{'b': 2}
>>>
>>> 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}}
显然,你的问题已得到答复。但在这里有一点有帮助的是纠正你的思维模式。
在Python中,变量不是“存储”值,而是“命名”值。请查看这篇文章,了解雕像指向酒店的例子。
快速简单地检查是否引用了相同的对象的方法是打印变量的ID:
>>> a = {}
>>> b = a
>>> print(id(a), id(b))
12345 12345
变量a
和c
都指向同一个字典对象,因此如果您通过变量c
对其进行更改,则底层字典对象会更改。由于a
指向相同的对象,因此这些更改也将从那里可见。
如果您想让a
和c
引用彼此独立的字典,则需要复制字典,以便实际收到两个单独的对象。您可以使用dict.copy
来实现此目标:
a = {'b': 1}
c = a.copy()
c.update({'b': 2})
print a # {'b': 1}
print c # {'b': 2}
import copy
a = {'b': {'c': 1}}
b = copy.deepcopy(a)
b['b'].update({'c': 2})
print a # {'b': {'c': 1}}
print b # {'b': {'c': 2}}