Python中循环后使用list.append()数据被覆盖问题的解决


Posted in Python onJuly 01, 2018

前言

最近发现一个问题,在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:

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 相关文章推荐
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
python对DICOM图像的读取方法详解
Jul 17 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
Aug 30 Python
python下实现二叉堆以及堆排序的示例
Sep 29 Python
matplotlib在python上绘制3D散点图实例详解
Dec 09 Python
TensorFlow如何实现反向传播
Feb 06 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
Python实现程序判断季节的代码示例
Jan 28 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
Python龙贝格法求积分实例
Feb 29 Python
手残删除python之后的补救方法
Jun 26 Python
Django 连接sql server数据库的方法
Jun 30 #Python
python绘制直线的方法
Jun 30 #Python
Python Grid使用和布局详解
Jun 30 #Python
Python 删除连续出现的指定字符的实例
Jun 29 #Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 #Python
python去除文件中重复的行实例
Jun 29 #Python
python获取指定字符串中重复模式最高的字符串方法
Jun 29 #Python
You might like
优化PHP代码的53条建议
2008/03/27 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
2015/02/27 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
bootstrap表格分页实例讲解
2016/12/30 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
Vue获取微博授权URL代码实例
2020/11/04 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
python基于socket实现网络广播的方法
2015/04/29 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
Python 使用office365邮箱的示例
2020/10/29 Python
flask框架中的cookie和session使用
2021/01/31 Python
德国网上药房:Apotal
2017/04/04 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
Android面试题附答案
2014/12/08 面试题
兽医医药专业求职信
2014/07/27 职场文书
2015年干部教育培训工作总结
2015/05/15 职场文书
2015重阳节敬老活动总结
2015/07/29 职场文书
如何利用python创作字符画
2022/06/25 Python