有些人说Python字典是线程安全的。这是否意味着我可以在迭代过程中修改字典中的项目?
>>> d = dict.fromkeys(range(5), 0)
>>> for k in d: d[k] += 1
...
>>> d
{0: 1, 1: 1, 2: 1, 3: 1, 4: 1}
而 this 的行为是由 Python 的标准语义保证的,因此语言的不同实现都应该保留它。
不会。如果您尝试在迭代之间更改字典的大小,则现代Python版本将引发异常。
>>> d={'one':1, 'two':2}
>>> for x in d:
... d['three']=3
... print x
...
two
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
请注意,您不需要使用线程即可看到这一点。
如果您在另一个线程中同时添加或删除元素,则无法迭代字典。您可能会收到“RuntimeError:dictionary changed size during iteration”或“KeyError”错误。
请参见实时示例,您可以对其进行操作。
是的,在不同的线程中,您可以同时迭代、更改元素的值、获取元素而不会出现异常。