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 (2)
Oct 31 Python
python之yield表达式学习
Sep 02 Python
python append、extend与insert的区别
Oct 13 Python
Python金融数据可视化汇总
Nov 17 Python
用python实现对比两张图片的不同
Feb 05 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
使用Template格式化Python字符串的方法
Jan 22 Python
python变量命名的7条建议
Jul 04 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
关于Numpy之repeat、tile的用法总结
Jun 02 Python
python对文档中元素删除,替换操作
Apr 02 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发电子邮件
2006/10/09 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
2014/12/17 PHP
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
[02:04]2020年夜魇暗潮预告片
2020/10/30 DOTA
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python用字典构建多级菜单功能
2019/07/11 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
python查看数据类型的方法
2019/10/12 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
Python常用库大全及简要说明
2020/01/17 Python
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
搞笑获奖感言
2014/01/30 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
保密工作目标责任书
2014/07/28 职场文书
初中学习计划书范文
2014/09/15 职场文书
司考复习计划
2015/01/19 职场文书
华山导游词
2015/02/03 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android
HTML中的表单元素介绍
2022/02/28 HTML / CSS