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