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 相关文章推荐
python3.3使用tkinter开发猜数字游戏示例
Mar 14 Python
Python3基础之基本运算符概述
Aug 13 Python
Python操作MongoDB数据库PyMongo库使用方法
Apr 27 Python
Python如何实现文本转语音
Aug 08 Python
python运行其他程序的实现方法
Jul 14 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
Python函数的默认参数设计示例详解
Dec 01 Python
Python列表倒序输出及其效率详解
Mar 04 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
Mar 18 Python
使用 django orm 写 exists 条件过滤实例
May 20 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分页类的代码
2011/05/18 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
【消息提示组件】,兼容IE6/7&&FF2
2007/09/04 Javascript
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
python中解析json格式文件的方法示例
2017/05/03 Python
Python管理Windows服务小脚本
2018/03/12 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
django 多数据库及分库实现方式
2020/04/01 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
群众路线教育实践活动调研报告
2014/11/03 职场文书
《1942》观后感
2015/06/08 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL