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利用Nagios增加微信报警通知的功能
Feb 18 Python
Python与Java间Socket通信实例代码
Mar 06 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
Python依赖包整体迁移方法详解
Aug 15 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
Python使用贪婪算法解决问题
Oct 22 Python
如何基于python操作excel并获取内容
Dec 24 Python
Python3 hashlib密码散列算法原理详解
Mar 30 Python
Python中如何添加自定义模块
Jun 09 Python
python实现计算图形面积
Feb 22 Python
pytorch 梯度NAN异常值的解决方案
Jun 05 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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/12/06 PHP
成为好程序员必须避免的5个坏习惯
2014/07/04 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
JSON辅助格式化处理方法
2013/03/26 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
js操作输入框提示信息且响应鼠标事件
2014/03/25 Javascript
JavaScript中this关键词的使用技巧、工作原理以及注意事项
2014/05/20 Javascript
javascript去掉代码里面的注释
2015/07/24 Javascript
js操作XML文件的实现方法兼容IE与FireFox
2016/06/25 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
2018/09/12 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 大神专访第二弹!
2014/05/20 DOTA
Python解惑之整数比较详解
2017/04/24 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
Python微信公众号开发平台
2018/01/25 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
实习生自荐信范文
2013/11/13 职场文书
2014年党务公开实施方案
2014/02/27 职场文书
环保倡议书怎么写
2014/05/16 职场文书
八项规定整改方案
2014/10/01 职场文书