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之编写类之四再论继承
Oct 11 Python
使用graphics.py实现2048小游戏
Mar 10 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
Python中字符串的处理技巧分享
Sep 17 Python
Python如何为图片添加水印
Nov 25 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
python3模块smtplib实现发送邮件功能
May 22 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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 foreach循环使用详解与实例代码
2010/05/08 PHP
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
详解vscode中vue代码颜色插件
2018/10/11 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
Python数据可视化之画图
2019/01/15 Python
django中forms组件的使用与注意
2019/07/08 Python
django框架使用方法详解
2019/07/18 Python
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
什么是网络协议
2016/04/07 面试题
总经理助理岗位职责
2013/11/08 职场文书
校园文化建设方案
2014/02/03 职场文书
拉歌口号大全
2014/06/13 职场文书
党员目标管理责任书
2014/07/25 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
基于docker安装zabbix的详细教程
2022/06/05 Servers