前言
最近发现一个问题,在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:
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,分配不同的地址。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
继续阅读与本文标签相同的文章
上一篇 :
Linux系统中swap分区的设置与增加/删除
-
5G城市,智慧军运!天河机场打造华中首个5G全覆盖机场
2026-05-15栏目: 教程
-
三一筑工亮相第四届BIM技术应用与建筑工业化论坛,核心技术获业界肯定!
2026-05-15栏目: 教程
-
雷尼绍联手合作伙伴简化脊柱植入体增材制造工艺
2026-05-15栏目: 教程
-
项目管理包括哪些内容
2026-05-15栏目: 教程
-
微信卸载后怎么恢复聊天记录?恢复微信聊天记录的正确方法
2026-05-15栏目: 教程
