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中定义结构体的方法
Mar 04 Python
Python中__init__和__new__的区别详解
Jul 09 Python
Python 字典与字符串的互转实例
Jan 13 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
Django model update的多种用法介绍
Mar 28 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
python爬虫scrapy框架的梨视频案例解析
Feb 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简单命令代码集锦
2007/09/24 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
2013/11/08 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
介绍Python中内置的itertools模块
2015/04/29 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
2016/07/02 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
学生自我鉴定
2013/12/18 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
股份合作协议书
2014/04/12 职场文书
《悯农》教学反思
2014/04/28 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库