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使用7z解压apk包的方法
Apr 18 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
May 20 Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 Python
举例详解Python中yield生成器的用法
Aug 05 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
Python的条件表达式和lambda表达式实例
Jan 31 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
基于python调用jenkins-cli实现快速发布
Aug 14 Python
代码复现python目标检测yolo3详解预测
May 06 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
一个比较不错的PHP日历类分享
2014/11/18 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
2013/08/08 Javascript
JS组件Bootstrap导航条使用方法详解
2016/04/29 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
JS常用加密编码与算法实例总结
2016/12/22 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
pymongo实现多结果进行多列排序的方法
2015/05/16 Python
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
python 调用c语言函数的方法
2017/09/29 Python
python利用有道翻译实现"语言翻译器"的功能实例
2017/11/14 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
python实现的Iou与Giou代码
2020/01/18 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
社区禁毒工作方案
2014/06/02 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
考研英语辞职信
2015/05/13 职场文书
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers