蟒该列表中的附加元件改变它的原始变量的变化(Python The appended element

2019-07-18 19:58发布

因此,这里是一个什么样我想在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_获得的字典? 提前致谢。

Answer 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_


文章来源: Python The appended element in the list changes as its original variable changes