所以这里是我在python中尝试做的抽象代码。
list_ = []
dict_ = {}
for i in range(something):
get_values_into_dict(dict_)
list_.append(dict_)
dict_.clear()
print list_
这里当我清除dict_时,显然列表中的所有元素都被删除了,因为它们只是映射到变量dict_的地址。
我想要的是复制dict_的实例,以便我可以将它存储在list_中。
有人可以解释一下将每个循环中获得的dict存储到list_中的方法吗?提前谢谢。
答案 0 :(得分: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_