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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
python处理中文编码和判断编码示例
Feb 26 Python
Python合并字符串的3种方法
May 21 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
RC4文件加密的python实现方法
Jun 30 Python
详解Python的Django框架中的中间件
Jul 24 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
python分布式编程实现过程解析
Nov 08 Python
Python开发入门——迭代的基本使用
Sep 03 Python
python UIAutomator2使用超详细教程
Feb 19 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中current、next与reset函数用法实例
2014/11/17 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
小程序实现发表评论功能
2018/07/06 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
nodejs中使用archive压缩文件的实现代码
2019/11/26 NodeJs
vue实现短信验证码输入框
2020/04/17 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
图文详解WinPE下安装Python
2016/05/17 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
在python中pandas的series合并方法
2018/11/12 Python
python多线程扫描端口(线程池)
2019/09/04 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
美国保健品专家:Life Extension
2018/05/04 全球购物
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
给排水专业应届生求职信
2013/10/12 职场文书
课外小组活动总结
2014/08/27 职场文书
学位证书委托书
2014/09/30 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书