Python 字典 dictionary changed size during iteration


1 TestMap = {1:0, 2:0, 3:1, 4:1}
2 for key in TestMap:
3     TestMap.pop(key)

运行结果:

for key in TestMap:
RuntimeError: dictionary changed size during iteration

修改一下:

TestMap = {1:0, 2:0, 3:1, 4:1}
'''
for key in TestMap:
    TestMap.pop(key)
'''

for key in TestMap.keys():
    TestMap.pop(key)

OK,运行正常。

分析:“for key in TestMap:”这种方式是通过iterator遍历字典(鄙人YY其内部可能是个链表),边遍历边删除会崩溃啊亲;“for key in TestMap.keys():”这种方式是通过便利一个列表来依次获取每个“key”(TestMap.keys()返回个列表),所以不崩溃啊亲。

联想:这个不容易发觉的问题让我想起了之前一个通过索引遍历列表,一边遍历一边删除会导致崩溃的问题,可是这两个问题还是有区别的。总的来讲还是遍历删除时要注意的问题。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM