当前位置: 首页 > 面试题库 >

Python列表中的附加元素随其原始变量的变化而变化

郎建章
2023-03-14
问题内容

因此,这是我要在python中执行的操作的抽象代码。

list_ = []
dict_ = {}
for i in range(something):
    get_values_into_dict(dict_)
    list_.append(dict_)
    dict_.clear()
print list_

在这里,当我清除dict_时,显然list_中的所有元素都被删除,因为它们只是地址映射到变量dict_。

我想要的是复制dict_的实例,以便可以将其存储在list_中。

有人可以解释一下在每个循环中将获取的字典存储到list_中的方法吗?提前致谢。


问题答案:

您正在将对字典的引用添加到列表中,然后清除字典 本身 。这将删除字典的内容,因此对该字典的所有引用将显示该字典现在为空。

将其与创建两个指向同一词典的变量进行比较:

>>> a = {'foo': 'bar'}
>>> b = a
>>> b
{'foo': 'bar'}
>>> a.clear()
>>> b
{}

字典是可变的;您更改对象本身。

在循环中创建一个新字典,而不是清除并重用一个字典:

list_ = []
for i in range(something):
    html" target="_blank">dict_ = {}
    get_values_into_dict(dict_)
    list_.append(dict_)
print list_

或者更好的是,get_values_into_dict() 返回 一个字典来代替:

list_ = []
for i in range(something):
    dict_ = return_values_as_dict()
    list_.append(dict_)
print list_


 类似资料:
  • 我有一个变量,它是由逗号分隔的单词列表,如下所示: 单词列表可以包含比上述示例更多或更少的单词。 如何随机化以获得这样的东西: word1、word5、word2、word3、word4 或 word4、word5、word3、word1、word2

  • 我的列表由变量类型(字符串),金额(双精度)和数量(整数)组成,它看起来像这样: 所以我试图循环我的数组来寻找重复的,如果是重复的,就加上数量。结果会是这样的: 我尝试过创建另一个列表,将列表添加到新列表中,然后比较它们,但没有成功 我不希望对值进行硬编码以检查重复类型

  • 给定一个场景,例如: null 然而,如果一个新的开发人员出现并试图从一开始就滚动更改,这不会失败吗?由于liquibase只查看文件的当前状态,ChangeSet3不会因为包B的最新版本包含对表a中一个列的引用而失败吗? 如何解决这一问题?有没有一种方法让Liquibase基于repo commit或标记来拉变更集?或者您必须编写一个包装器来串行检查所有的发布标记并将liquibase应用于每个

  • 问题内容: 有什么方法可以在python中每次变量值更改时调用函数? 像听众一样吗? 具体来说,我指的 是 像GAE-Session这样的脚本之间 仅共享变量 的情况 。(使用Cookie,Memcache等共享数据) 示例:ScriptA和ScriptB,共享一个会话变量。当脚本B进行更改时,SctiptA必须调用一个方法来处理该更改。 问题答案: 使用属性。首先,可变值可以更改。

  • 问题内容: 我有一个清单,我创建了一个清单以进行一些操作,同时仍保留原始清单。但是,当我设置copy_list等于时,它们将变为同一事物,并且如果我更改,它们也会更改。例如: 退货 我对实际发生的事情不太了解,但看起来org_list实际上是将自身传递给copy_list他们,因此它们实际上是同一回事。 有没有一种方法可以制作org_list的独立副本,而又不需要做一些笨拙的事情: 我之所以这样说

  • 我对python相当陌生,我想知道局部变量是如何工作的。让我们从一个简单方法的示例开始: 让我们假设local_dict像一种常量变量一样使用。这里有一个问题:它是在每次调用do_sth()时创建的,还是创建一次并保存在do_sth()内部的某个地方?