http://www.cnblogs.com/codeape/archive/2012/11/21/2780534.html
2012
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:”這種方式是通過(guò)iterator遍歷字典(鄙人YY其內部可能是個(gè)鏈表),邊遍歷邊刪除會(huì )崩潰啊親;“for key in TestMap.keys():”這種方式是通過(guò)便利一個(gè)列表來(lái)依次獲取每個(gè)“key”(TestMap.keys()返回個(gè)列表),所以不崩潰啊親。
聯(lián)想:這個(gè)不容易發(fā)覺(jué)的問(wèn)題讓我想起了之前一個(gè)通過(guò)索引遍歷列表,一邊遍歷一邊刪除會(huì )導致崩潰的問(wèn)題,可是這兩個(gè)問(wèn)題還是有區別的??偟膩?lái)講還是遍歷刪除時(shí)要注意的問(wèn)題。
聯(lián)系客服