Python 列表中添加的元素会随着原变量的变化而改变

3 投票
1 回答
824 浏览
提问于 2025-04-17 13:54

这是我在用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_里呢?提前谢谢大家。

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_

撰写回答