關於Python中,循環后使用list.append(),數據被覆蓋的問題


在一次爬蟲實戰中,需要將字典加入列表中,意外的情況出現了!!!下面簡單分析一下出現的狀況:

 1 list = []
 2 dic = {}
 3 for i in range(5):
 4     dic['num'] = i
 5     list.append(dic)
 6     print(id(dic))
 7 print(list)
 8 136652096
 9 136652096
10 136652096
11 136652096
12 136652096
13 [{'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取到的值也改變。

正確做法:

 1 list = []
 2 for i in range(5):
 3     dic = {}
 4     dic['num'] = i
 5     list.append(dic)
 6     print(id(dic))
 7 print(list)
 8 138383888
 9 136652192
10 138383408
11 138384272
12 138383792
13 [{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]

正確做法是將dic放入循環內,這樣每次循環都會是一個新的dic,分配不同的地址。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM