我的例子是这样的
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(使用前将#替换为@)