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

 更新时间:2018年07月01日 16:39:15   作者:iqunqunqun  
这篇文章主要给大家介绍了关于Python中循环后使用list.append()数据被覆盖问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • Numpy安装、升级与卸载的详细图文教程

    Numpy安装、升级与卸载的详细图文教程

    Python官网上的发行版是不包含 NumPy 模块的,下面这篇文章主要给大家介绍了关于Numpy安装、升级与卸载的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • python提取包含关键字的整行数据方法

    python提取包含关键字的整行数据方法

    今天小编就为大家分享一篇python提取包含关键字的整行数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python2.7.10以上pip更新及其他包的安装教程

    Python2.7.10以上pip更新及其他包的安装教程

    今天小编就为大家分享一篇Python2.7.10以上pip更新及其他包的安装教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现遍历子文件夹并将文件复制到不同的目标文件夹

    Python实现遍历子文件夹并将文件复制到不同的目标文件夹

    这篇文章主要介绍了如何基于Python语言实现遍历多个子文件夹,将每一个子文件夹中大量的文件,按照每一个文件的文件名称的特点复制到不同的目标文件夹中,感兴趣的可以了解下
    2023-08-08
  • Sanic框架异常处理与中间件操作实例分析

    Sanic框架异常处理与中间件操作实例分析

    这篇文章主要介绍了Sanic框架异常处理与中间件操作,结合实例形式较为详细的分析了Sanic框架抛出异常、异常处理、中间件、监听器相关原理与操作技巧,需要的朋友可以参考下
    2018-07-07
  • wxpython布局的实现方法

    wxpython布局的实现方法

    这篇文章主要介绍了wxpython布局的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Python操作Word批量生成合同的实现示例

    Python操作Word批量生成合同的实现示例

    这篇文章主要介绍了Python操作Word批量生成合同的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python使用pickle模块实现序列化功能示例

    Python使用pickle模块实现序列化功能示例

    这篇文章主要介绍了Python使用pickle模块实现序列化功能,结合实例形式分析了基于pickle模块的序列化操作相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • 详解scrapy内置中间件的顺序

    详解scrapy内置中间件的顺序

    这篇文章主要介绍了详解scrapy内置中间件的顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 一篇文章带你了解kali局域网攻击

    一篇文章带你了解kali局域网攻击

    这篇文章主要给大家介绍了kali的局域网攻击,小编觉得这篇文章还是不错的,使用起来也是非常方便的,需要的朋友可以参考下
    2021-08-08

最新评论