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 31 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
python计算两个地址之间的距离方法
Jun 09 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
Python文件路径名的操作方法
Oct 30 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
Apr 14 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
解决python 输出到csv 出现多空行的情况
Mar 24 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 Socket技术
2013/08/02 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
php数组保存文本与文本反编成数组实例
2014/11/13 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
jQuery多文件异步上传带进度条实例代码
2016/08/16 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
2014/08/15 Python
python学习必备知识汇总
2017/09/08 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
OpenCV 模板匹配
2019/07/10 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
局域网定义和特性
2016/01/23 面试题
秘书英文求职信范文
2014/01/31 职场文书
医院病假条怎么写
2015/08/17 职场文书
Python中常见的导入方式总结
2021/05/06 Python
redis cluster支持pipeline的实现思路
2021/06/23 Redis