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操作MongoDB数据库PyMongo库使用方法
Apr 27 Python
使用wxPython获取系统剪贴板中的数据的教程
May 06 Python
Python 专题一 函数的基础知识
Mar 16 Python
利用python获取Ping结果示例代码
Jul 06 Python
Python logging模块用法示例
Aug 28 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
手写一个python迭代器过程详解
Aug 27 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
500行python代码实现飞机大战
Apr 24 Python
Django如何批量创建Model
Sep 01 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
Python实现归一化算法详情
Mar 18 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
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
php date()日期时间函数详解
2010/05/16 PHP
php文件上传的简单实例
2013/10/19 PHP
php发送post请求函数分享
2014/03/06 PHP
使用PHP开发留言板功能
2019/11/19 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
JavaScript使用DeviceOne开发实战(二) 生成调试安装包
2015/12/01 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
JavaScript-html标题滚动效果的简单实现
2016/09/08 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
bootstrap中的 form表单属性role="form"的作用详解
2017/01/20 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
详解vue-router的导航钩子(导航守卫)
2020/11/02 Javascript
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
Python实现以时间换空间的缓存替换算法
2016/02/19 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
python如何实现一个刷网页小程序
2018/11/27 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
描述RIP和OSPF区别以及特点
2015/01/17 面试题
给排水专业应届生求职信
2013/10/12 职场文书
2014的自我评价
2014/01/13 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
提拔干部考察材料
2014/05/26 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
sql字段解析器的实现示例
2021/06/23 SQL Server
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server