1. 程式人生 > >關於Python中,循環後使用list.append(),數據被覆蓋的問題

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

TE span 並不是 [] end append 次循環 col 自己的

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

 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,分配不同的地址。

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