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()返回個列表),所以不崩潰啊親。
聯想:這個不容易發覺的問題讓我想起了之前一個通過索引遍歷列表,一邊遍歷一邊刪除會導致崩潰的問題,可是這兩個問題還是有區別的。總的來講還是遍歷刪除時要注意的問題。