因此,这里是一个什么样我想在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):
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_
文章来源: Python The appended element in the list changes as its original variable changes