Python中循環(huán)后使用list.append()數(shù)據(jù)被覆蓋問題的解決
前言
最近發(fā)現(xiàn)一個問題,在一次爬蟲實戰(zhàn)中,需要將字典加入列表中,意外的情況出現(xiàn)了?。?!下面簡單分析一下出現(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}]
結(jié)果出乎意料,并不是我們簡單認為的
[{'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)內(nèi),這樣每次循環(huán)都會是一個新的dic,分配不同的地址。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- Python數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表詳解
- Python 循環(huán)讀取數(shù)據(jù)內(nèi)存不足的解決方案
- python 使用xlsxwriter循環(huán)向excel中插入數(shù)據(jù)和圖片的操作
- Python 使用xlwt模塊將多行多列數(shù)據(jù)循環(huán)寫入excel文檔的操作
- Python matplotlib讀取excel數(shù)據(jù)并用for循環(huán)畫多個子圖subplot操作
- python 循環(huán)數(shù)據(jù)賦值實例
- Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法
- python循環(huán)某一特定列的所有行數(shù)據(jù)(方法示例)
相關(guān)文章
Python?SQLAlchemy之SQL工具包和ORM的用法詳解
SQLAlchemy?是?Python?中一款非常流行的數(shù)據(jù)庫工具包,它對底層的數(shù)據(jù)庫操作提供了高層次的抽象,在本篇文章中,我們將介紹SQLAlchemy的兩個主要組成部分:SQL工具包和對象關(guān)系映射器的基本使用,需要的朋友可以參考下2023-08-08
利用python numpy+matplotlib繪制股票k線圖的方法
這篇文章主要介紹了利用python numpy+matplotlib繪制股票k線圖的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Pyqt+matplotlib 實現(xiàn)實時畫圖案例
這篇文章主要介紹了Pyqt+matplotlib 實現(xiàn)實時畫圖案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
python項目中requirements.txt的用法實例教程
Python項目中必須包含一個requirements.txt文件,用于記錄所有依賴包及其精確的版本號,以便新環(huán)境部署,下面這篇文章主要給大家介紹了關(guān)于python項目中requirements.txt用法的相關(guān)資料,需要的朋友可以參考下2022-06-06

