字典的冗余副本作为Python列表

时间:2018-11-29 11:11:36

标签: python-3.x

我正在尝试将字典的冗余副本制作为列表,但要更新其中一个键。最初,列表仅包含一项,例如:

l1 = [{'case':1}]

我运行了以下循环:

for i in range(1,4):
    l1.append(l1[i-1])
    l1[i]['case'] += 1

我希望输出为:[{'case':1},{'case':2},{'case':3},{'case':4}]

实际输出如下:[{'case':4},{'case':4},{'case':4},{'case':4}]

如何获得预期的输出?

1 个答案:

答案 0 :(得分:1)

Python对原始字典保留引用,因此,如果您使用l1[i]['case'] += 1更改字典,则它会更改列表中的每个字典,因为它们是对同一对象的引用(换句话说,它们是相同字典)。

为了使它们独立,您必须调用dict.copy(),因此,如果将代码更改为以下代码,它将起作用:

l1 = [{'case':1}]
for i in range(1,4): 
    l1.append(l1[i-1].copy()) 
    l1[i]["case"] += 1

print(l1)