3

所以这是我在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_中的方法吗?提前致谢。

4

1 回答 1

4

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

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

>>> 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_
于 2013-01-28T09:52:16.663 回答