Python中循環(huán)后使用list.append()數(shù)據(jù)被覆蓋問題的解決
前言
最近發(fā)現(xiàn)一個(gè)問題,在一次爬蟲實(shí)戰(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é)果出乎意料,并不是我們簡單認(rèn)為的
[{'num': 0}, {'num': 1}, {'num': 2}, {'num': 3}, {'num': 4}]
用我自己的理解是:
如上圖,每一個(gè)dic都給list一個(gè)位置,但你的dic在循環(huán)外,也就說每次循環(huán)你給的都是一個(gè)地址,dic的值改變,新一次的循環(huán)值就會(huì)覆蓋上一次循環(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)都會(huì)是一個(gè)新的dic,分配不同的地址。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- 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)畫多個(gè)子圖subplot操作
- python 循環(huán)數(shù)據(jù)賦值實(shí)例
- Python中l(wèi)ist循環(huán)遍歷刪除數(shù)據(jù)的正確方法
- python循環(huán)某一特定列的所有行數(shù)據(jù)(方法示例)
相關(guān)文章
python提取包含關(guān)鍵字的整行數(shù)據(jù)方法
今天小編就為大家分享一篇python提取包含關(guān)鍵字的整行數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python實(shí)現(xiàn)遍歷子文件夾并將文件復(fù)制到不同的目標(biāo)文件夾
這篇文章主要介紹了如何基于Python語言實(shí)現(xiàn)遍歷多個(gè)子文件夾,將每一個(gè)子文件夾中大量的文件,按照每一個(gè)文件的文件名稱的特點(diǎn)復(fù)制到不同的目標(biāo)文件夾中,感興趣的可以了解下2023-08-08Python操作Word批量生成合同的實(shí)現(xiàn)示例
這篇文章主要介紹了Python操作Word批量生成合同的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python使用pickle模塊實(shí)現(xiàn)序列化功能示例
這篇文章主要介紹了Python使用pickle模塊實(shí)現(xiàn)序列化功能,結(jié)合實(shí)例形式分析了基于pickle模塊的序列化操作相關(guān)操作技巧,需要的朋友可以參考下2018-07-07