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,分配不同的地址。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对呐喊教程的支持。

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。