您好,登錄后才能下訂單哦!
這篇文章主要介紹如何解決Python中循環后使用list.append()數據被覆蓋問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
前言
最近發現一個問題,在一次爬蟲實戰中,需要將字典加入列表中,意外的情況出現了!!!下面簡單分析一下出現的狀況:
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在循環外,也就說每次循環你給的都是一個地址,dic的值改變,新一次的循環值就會覆蓋上一次循環的值,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放入循環內,這樣每次循環都會是一個新的dic,分配不同的地址。
以上是“如何解決Python中循環后使用list.append()數據被覆蓋問題”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。