Python中循环后使用list.append()数据被覆盖问题的解决
2018-07-01 16:39
811 查看
前言
最近发现一个问题,在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:
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 使用list.append()后前面的数据被后面的数据覆盖-解决办法
- python 使用list.append()后前面的数据被后面的数据覆盖-解决办法
- python语言 buffer类型数据的使用 'ascii' codec can't decode byte 0xe5 问题的解决
- Python中使用socket发送HTTP请求数据接收不完整问题解决方法
- 解决在循环中使用ajax异步时,数据的同步问题
- C# List<T> Add方法循环添加时只保存了最后一次的数据(覆盖问题)
- Python中使用socket发送HTTP请求数据接收不完整问题解决方法
- 解决spring mvc +hibernate整合时使用jackson返回json数据无限循环问题的官方解决方案
- 解决vuejs 使用value in list 循环遍历数组出现警告的问题
- 【jQuery】解决在循环中使用ajax异步时,数据的同步问题
- Hibernate使用原生SQL多表查询时字段名相同导致查询数据覆盖问题解决办法
- List使用add方法添加数据时的覆盖问题
- List使用add方法添加数据时的覆盖问题
- echarts2.0 时间轴搭配力导向图使用+时间轴数据覆盖问题的解决
- 取从textarea中存到MYSQL的数据以原格式显示问题以及解决MySQL日期处理和标签的使用
- 使用asx3m与xstream配合解决flex与java利用httpservice传递xml数据问题
- 解决给定义的整型数据输入字符时出现死循环的问题
- asp中使用FCKeditor存取数据时出现乱码问题解决方法
- 使用Jsonp解决跨域数据访问问题
- JSP数据和JavaScirpt数据交互使用问题的一种解决方法