Python中循環(huán)后使用list.append()數(shù)據被覆蓋問題的解決
前言
最近發(fā)現(xiàn)一個問題,在一次爬蟲實戰(zhàn)中,需要將字典加入列表中,意外的情況出現(xiàn)了!?。∠旅婧唵畏治鲆幌鲁霈F(xiàn)的狀況:
list = [] dic = {} for i in range(5): dic['num'] = i list.append(dic) print(id(dic)) print(list) 136652096 136652096 136652096 136652096 136652096 [{'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}]
結果出乎意料,并不是我們簡單認為的
[{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]
用我自己的理解是:
如上圖,每一個dic都給list一個位置,但你的dic在循環(huán)外,也就說每次循環(huán)你給的都是一個地址,dic的值改變,新一次的循環(huán)值就會覆蓋上一次循環(huán)的值,list取到的值也改變。
正確做法:
list = [] for i in range(5): dic = {} dic['num'] = i list.append(dic) print(id(dic)) print(list) 138383888 136652192 138383408 138384272 138383792 [{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]
正確做法是將dic放入循環(huán)內,這樣每次循環(huán)都會是一個新的dic,分配不同的地址。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Python數(shù)據結構之循環(huán)鏈表詳解
- Python 循環(huán)讀取數(shù)據內存不足的解決方案
- python 使用xlsxwriter循環(huán)向excel中插入數(shù)據和圖片的操作
- Python 使用xlwt模塊將多行多列數(shù)據循環(huán)寫入excel文檔的操作
- Python matplotlib讀取excel數(shù)據并用for循環(huán)畫多個子圖subplot操作
- python 循環(huán)數(shù)據賦值實例
- Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據的正確方法
- python循環(huán)某一特定列的所有行數(shù)據(方法示例)
相關文章
Python實現(xiàn)遍歷子文件夾并將文件復制到不同的目標文件夾
這篇文章主要介紹了如何基于Python語言實現(xiàn)遍歷多個子文件夾,將每一個子文件夾中大量的文件,按照每一個文件的文件名稱的特點復制到不同的目標文件夾中,感興趣的可以了解下2023-08-08Python使用pickle模塊實現(xiàn)序列化功能示例
這篇文章主要介紹了Python使用pickle模塊實現(xiàn)序列化功能,結合實例形式分析了基于pickle模塊的序列化操作相關操作技巧,需要的朋友可以參考下2018-07-07