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 动态获取当前运行的类名和函数名的方法
Apr 15 Python
Python中的自定义函数学习笔记
Sep 23 Python
python之wxPython应用实例
Sep 28 Python
Python读取键盘输入的2种方法
Jun 16 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
python 3.6.7实现端口扫描器
Sep 04 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
解决Python spyder显示不全df列和行的问题
Apr 20 Python
如何基于windows实现python定时爬虫
May 01 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
对Keras自带Loss Function的深入研究
May 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关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
jQuery数组处理方法汇总
2011/06/20 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
JS输出空格的简单实现方法
2016/09/08 Javascript
基于jQuery实现滚动切换效果
2016/12/02 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python多线程用法实例详解
2015/01/15 Python
python实现简单温度转换的方法
2015/03/13 Python
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
Python实现调度算法代码详解
2017/12/01 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
Python 统计位数为偶数的数字代码详解
2020/03/15 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
易程科技软件测试笔试
2013/03/24 面试题
中班上学期幼儿评语
2014/04/30 职场文书
盲山观后感
2015/06/11 职场文书
教师节表彰会主持词
2015/07/06 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书