python初始化字典值为列表,需注意避免赋值其中一个但其他值也变化

初始化字典的第一反应是使用dict.fromkeys(),如果value值是int之类的简单值类型没什么问题,但用list初始化则不然。

场景是为dict初始化value值为空的list,可以分别对不同key值对应的value独立操作。

使用dict.fromkeys()初始化得到的字典改动一个value其他的value值也会跟随变化,这是因为后者每个key对应的value值都指向了同一个列表。也就是说,使用dict.fromkeys()初始化,只存在一个被共用的list。

python初始化字典值为列表,需注意避免赋值其中一个但其他值也变化

如上可见,用独立空列表快速初始化字典的正确姿势是使用collections.defaultdict()。