迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

2024-05-20

我的例子是这样的

for my_key in my_dict.keys():
    my_dict[my_key].mutate()

上述代码的行为是否已定义(假设my_dict是一本字典并且mutate是一个改变其对象的方法)?我担心的是,改变字典中的值可能会使字典键上的迭代器无效。

另一方面,Python 文档 http://www.tutorialspoint.com/python/dictionary_keys.htm of the keys方法表明它返回一个列表。如果是这样,我应该(我认为)能够改变字典的值,并且只要我不改变、添加或删除任何键,仍然可以安全地访问字典的每个元素。那是对的吗?


是的,这是安全的,至少在所有基于 C 的 Python 实现中是这样。这样做也是安全的:

for my_key in my_dict: # NOTE:  no .keys() here
    my_dict[my_key].mutate()

也就是说,安全性并不依赖于具体化密钥列表,并且通常不调用会更有效.keys()只是为了迭代键。

EDIT

请注意,在迭代期间完全替换与现有键关联的值也可以:

for my_key in my_dict:
    my_dict[my_key] = something_new()

文档对此可能更清楚;-) 什么isn't可预见的安全是在迭代期间删除或添加键。你对价值观做什么并不重要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效? 的相关文章

随机推荐