【Python】list.append()字典在for循环中数据覆盖的分析与解决

2023-11-03

问题:预期打印出来的list为:[{'num': 0}, {'num': 1}, {'num': 2}],结果为[{'num': 2}, {'num': 2}, {'num': 2}]

list=[]
dictionary={"num":""}
for i in range(3):
    dictionary["num"]=i
    list.append(d)
print(list)    #[{'num': 2}, {'num': 2}, {'num': 2}]

解决:将字典写在for循环中,得到预期的list[{'num': 0}, {'num': 1}, {'num': 2}]

list=[]
for i in range(3):
    dictionary={"num":""}
    dictionary["num"]=i
    list.append(d)
print(list)    #[{'num': 0}, {'num': 1}, {'num': 2}]

原因:

1.dictionary(字典)赋给list的是一个位置

2.dictionary定义在循环外,每次使用list.append(dictionary)赋给 list的都是相同的位置,即指向了同一块的地址;当在同一地址的dictionary的值已经改变了,所以list取到的之前位置的值改变了,表现出后面数据覆盖前面数据的表象

3.dictionary定义在循环内,相当于每一次循环生成一个dictionary,占用不同的位置存储值,所以可以赋给list不同元素不同的位置,获得不同的值。 

总结:

1.对于不能理解地址,可以通过在循环中print(id(dictionary)),将地址打印出来对比分析

2.在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用

3.关于Python中复制、浅拷贝和深拷贝的区别

    (1)直接赋值传递对象的引用而已原始列表改变,被赋值的b也会做相同的改变

    (2)copy浅拷贝,只拷贝父对象,不会拷贝对象的内部的子对象,所以原始数据改变,子对象会改变

    (3)copy深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】list.append()字典在for循环中数据覆盖的分析与解决 的相关文章

  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 更好地相当于这个疯狂的嵌套 python for 循环

    for a in map for b in map a for c in map b for d in map c for e in map d print a b c d e 上面的代码用于创建图中一定长度的所有路径 map a 表示从
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • (亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)

    最近在进行一个Flask项目的过程中遇到了unresolved reference 包名 的问题 在网上找了好久解决方案 并没有一个能让我一步到位解决问题的 后来 我对该问题和网上的解决方案进行了分析 发现网上大多数都是针对项目同一目录下的
  • Idea之Java代码Remote JVM Debug

    Idea之Java代码Remote JVM Debug 1 适用场景 在公司中 java代码开发完成之后 一般都会部署到linux服务器上 以供公司客户进行使用 但是作为开发人员 尤其是一名新员工 了解公司产品源代码中的业务逻辑算的上是最重
  • Vue项目element-ui弹窗组件el-dialog、el-drawer,阻止点击遮罩层关闭

    项目需求问题 Vue项目element ui弹窗组件el dialog el drawer 阻止点击遮罩层关闭 Vue项目element ui弹窗组件el dialog el drawer 阻止点击遮罩层关闭 在使用element ui组件
  • 在 VMware Workstation 16 Pro 中安装 Ubuntu Server 22.04.1 并配置静态 IP 地址

    文章目录 1 下载 Ubuntu Server 22 04 1 2 新建虚拟机向导 3 编辑虚拟机设置 4 开启此虚拟机并配置Ubuntu系统 5 设置 root 用户的密码 6 允许远程连接 root 用户 7 配置静态 IP 地址 7
  • CVE-2021-41773 漏洞复现

    漏洞原理 Apache HTTP Server 2 4 49版本使用的ap normalize path函数在对路径参数进行规范化时会先进行url解码 然后判断是否存在 的路径穿越符 当检测到路径中存在 字符时 如果紧跟的2个字符是十六进制
  • PyCharm 集成PyQt5

    PyCharm 安装PyQt5 在Pycharm中安装软件时比较方便的 直接进行File gt Settings 接着进入Project gt Project Interpreter 然后点击右上角的加号 在检索文本框中输入PyQt5 和
  • 【5G消息产业图谱】正式发布!

    5G消息 在所有5G应用中脱颖而出 艳惊四座 那么 作为最快落地的5G应用 5G消息目前的进展如何 到底有多少玩家参与 实际又有多少行业用户在 试水 今天 5G产业圈特别制作的 5G消息产业图谱 正式发布 大家从我们的图谱中可以看到5G消息
  • 网络原理之初识

    目录 网络发展背景 独立模式 网络互联 局域网 广域网 网络通信基础 IP地址 端口号 协议 协议分层 OSI七层网络模型 TCP IP五层 四层 网络模型 物理层 数据链路层 网络层 传输层 应用层 封装和分用 网络发展背景 独立模式 独
  • Tensorflow 摄像头物体实时识别

    官方源码提供了图片的检测 但是实用性不高 所以对源码进行了修改 使用笔记本自带摄像头或者usb摄像头进行实时检测 第二张是摄像头实时物体识别 参考源 视频 https www youtube com watch v COlbP62 B U
  • 第41步 深度学习图像识别:Efficientnet建模(Tensorflow)

    一 写在前面 1 Efficientnet EfficientNet是Google在2019年提出的一种新的卷积神经网络架构 主要目标是提高模型的效率 即在保持或提高模型性能的同时 尽可能地降低模型的复杂性和计算需求 EfficientNe
  • 如何快速提高个人的计算机水平,如何进一步提高计算机水平

    文章 如何进一步提高计算机水平 周老师 您好 我是一名中学信息技术教师 我现在想进一步提高自己计算机专业方面的知识和能力 不知如何去做 我不是计算机专业毕业的 从事信息技术课程教学已两年 我对简单的Office 2000应用及计算机基本操作
  • 通过添加Access-Control-Allow-Origin首部字段,解决flask跨域问题

    今天在使用swagger测试接口的时候出现无法获取返回的问题 TypeError Origin http 10 8 15 49 18081 is not allowed by Access Control Allow Origin 查看日志
  • 树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头

    问题描述 在树莓派上使用多个USB摄像头时 如何确定各个摄像头所对应的id 比如 当有两个摄像头时 我尝试一个为cv2 VideoCapture 0 一个为cv2 VideoCapture 1 通过看捕获的图像 可以确定各摄像头的id 但这
  • attachInterrupt()函数

    attachInterrupt 函数介绍 attachInterrupt 函数是用于为Arduino开发板设置和执行ISR 中断服务程序 用的 ISR 中断服务程序 顾名思义就是中断Arduino当前正在处理的事情而优先去执行中断服务程序
  • 【CF补题】Codeforces Round #784 (Div. 4)C++代码

    A include
  • idea连接kerberos认证的hive

    其实用dbeaver连接hive就可以了 但是呢 idea也有这个功能 本着研究下的想法就试试 结果最后成功了 最后记录下 参考文章 感觉不太行 PyCharm idea通过插件database连接带Kerberos的hive 不饿同学的博
  • 服装商品销售数据分析

    一 分析背景和数据来源 随着电商的快速发展 人们的购物行为占比也快速增加 作为电商卖家为了获取更多的用户并提升店铺销售量 可以结合产品销售情况和用户情况进行分析 得到有价值的信息 规划自己的销售策略 本文以淘宝天猫上服装商品购买情况数据为例
  • Qt绘制雷达图(卫星轨迹图)

    效果图 功能 使用QPainter绘制 雷达图主要包括 同心圆 十字架 刻度 不同颜色的圆圈 可以设置卫星的俯仰角 方位角 程序采用系统与卫星的结合 多种系统 n个卫星数据 进行显示 可自行搭配数据结构 监测卫星活动状态 定时清理无数据卫星
  • 数值概率算法

    基本概念 计算定积分 rand和srand 在解决设计问题时 有时会用到概率算法 概率算法允许在执行过程中随机的选择下一步的计算步骤 又是可使算法大大降低复杂度 提高算法效率 但有时也可能得不到问题的全部答案 基本概念 概率算法大致分为4类
  • 【Python】list.append()字典在for循环中数据覆盖的分析与解决

    问题 预期打印出来的list为 num 0 num 1 num 2 结果为 num 2 num 2 num 2 list dictionary num for i in range 3 dictionary num i list appen