我只是尝试使用defaultdict而且我无法理解为什么更改defaultdict(d [1] = 2)会导致列表v发生更改,尽管在更改值之前已完成附加操作。请帮忙..
>>> d=defaultdict(int)
>>> d[1]=1
>>> d[2]=3
>>> v=[]
>>> v.append(d)
>>> v.append(d)
>>> v
[defaultdict(<type 'int'>, {1: 1, 2: 3}), defaultdict(<type 'int'>, {1: 1, 2: 3})]
>>> d[1]=2
>>> v
[defaultdict(<type 'int'>, {1: 2, 2: 3}), defaultdict(<type 'int'>, {1: 2, 2: 3})]
>>
答案 0 :(得分:1)
Python中的赋值语句不复制对象,它们在目标和对象之间创建绑定。对于可变或包含可变项目的集合,有时需要一个副本,因此可以更改一个副本而不更改另一个副本。
这意味着您应该将shallow copy d
添加到您的列表中:
v.append(d.copy())