Python列表中附加的元素会随着其原始变量的更改而更改

Python列表中附加的元素会随着其原始变量的更改而更改,python,list,dictionary,append,Python,List,Dictionary,Append,下面是我在python中尝试执行的抽象代码 list_ = [] dict_ = {} for i in range(something): get_values_into_dict(dict_) list_.append(dict_) dict_.clear() print list_ 在这里,当我清除dict_u时,列表中的所有元素显然都被删除了,因为它们只是映射到变量dict_u的地址 我想要的是复制dict_uu的实例,以便将其存储在列表中 有人能给我解释一下在

下面是我在python中尝试执行的抽象代码

list_ = []
dict_ = {}
for i in range(something):
    get_values_into_dict(dict_)
    list_.append(dict_)
    dict_.clear()
print list_
在这里,当我清除dict_u时,列表中的所有元素显然都被删除了,因为它们只是映射到变量dict_u的地址

我想要的是复制dict_uu的实例,以便将其存储在列表中


有人能给我解释一下在每个循环中将获得的dict存储到列表中的方法吗?提前感谢。

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

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

>>> 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_
或者更好的方法是,让
将\u值\u放入\u dict()
返回字典:

list_ = []
for i in range(something):
    dict_ = return_values_as_dict()
    list_.append(dict_)
print list_

这对你有帮助吗?明白了。“clear”函数的使用导致了这个问题,因为它删除了那个特定实例的内存。@user673919:它从字典中删除了键和相关值,是的。这太奇怪了!