【问题标题】:Python The appended element in the list changes as its original variable changesPython 列表中的附加元素随着其原始变量的变化而变化
【发布时间】:2013-01-11 15:10:01
【问题描述】:

这是我在 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_ 中。

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

【问题讨论】:

标签: python list dictionary append


【解决方案1】:

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

与创建两个指向同一个字典的变量相比:

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

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

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

list_ = []
for i in range(something):
    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_

【讨论】:

  • 明白了。 'clear' 功能的使用通过删除该特定实例的内存引起了麻烦。
  • @user673919:它从字典中删除了键和相关值,是的。
  • 这真是太棒了!
猜你喜欢
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2018-09-15
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
相关资源
最近更新 更多