Python中循环后使用list.append()数据被覆盖问题的解决

作者:iqunqunqun 时间:2023-02-08 20:45:49 

前言

最近发现一个问题,在一次爬虫实战中,需要将字典加入列表中,意外的情况出现了!!!下面简单分析一下出现的状况:


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,分配不同的地址。

来源:http://www.cnblogs.com/iqunqunqun/p/9249888.html

标签:python,循环,list.append()
0
投稿

猜你喜欢

  • Python表达式的优先级详解

    2021-09-21 14:24:59
  • python显示天气预报

    2022-04-22 23:46:38
  • python支持多继承吗

    2023-10-14 11:22:48
  • 10 分钟快速入门 Python3的教程

    2022-01-17 21:14:04
  • python仿抖音表白神器

    2023-03-15 03:35:56
  • 一份ASP内存的释放的实验报告

    2007-10-17 13:09:00
  • PHP实现对图片的反色处理功能【测试可用】

    2023-11-03 19:41:28
  • wiondws XP下安装MySQL图文教程

    2007-06-15 09:29:00
  • python中实现数组和列表读取一列的方法

    2021-04-07 08:04:48
  • python操作ini类型配置文件的实例教程

    2021-05-12 13:11:23
  • CSS的未来:一些试验性CSS属性

    2011-06-10 13:20:00
  • .NET多种数据库大数据批量插入、更新(支持SqlServer、MySql、PgSql和Oracle)

    2024-01-19 07:39:40
  • 交互设计的方法

    2010-08-18 12:32:00
  • PHP session会话的安全性分析

    2023-11-21 23:47:59
  • MySQL 中行转列的方法

    2024-01-25 23:55:59
  • 在ASP.NET 2.0中操作数据之五十六:使用ObjectDataSource缓存数据

    2024-05-11 09:26:18
  • python 实现数字字符串左侧补零的方法

    2021-07-07 10:34:43
  • MySQL数据库可以用任意ip连接访问的方法

    2024-01-19 21:00:02
  • Win10环境python3.7安装dlib模块趟过的坑

    2021-03-25 14:09:25
  • MySQL SQL 语法参考

    2024-01-17 15:50:05
  • asp之家 网络编程 m.aspxhome.com