前言
最近發現一個問題,在一次爬蟲實戰中,需要將字典加入列表中,意外的情況出現了?。?!下面簡單分析一下出現的狀況:
list = []dic = {}for i in range(5): dic['num'] = i list.append(dic) print(id(dic))print(list)136652096136652096136652096136652096136652096[{'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}]
結果出乎意料,并不是我們簡單認為的
[{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]
用我自己的理解是:
如上圖,每一個dic都給list一個位置,但你的dic在循環外,也就說每次循環你給的都是一個地址,dic的值改變,新一次的循環值就會覆蓋上一次循環的值,list取到的值也改變。
正確做法:
list = []for i in range(5): dic = {} dic['num'] = i list.append(dic) print(id(dic))print(list)138383888136652192138383408138384272138383792[{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]
正確做法是將dic放入循環內,這樣每次循環都會是一個新的dic,分配不同的地址。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林站長站的支持。
新聞熱點
疑難解答