????????今天写了段代码,功能为保存每个人获得每种评级的次数,程序经过大幅度简化后基本如下:
keys_dict = ['a', 'b', 'c']
padding_vector = [0, 0, 0]
pairs = [['a', 1], ['b', 2], ['c', 3]]
dict = {}
for key in keys_dict:
dict[key] = padding_vector
for pair in pairs:
dict[pair[0]][pair[1] - 1] += 1
print(dict)
? ? ? ? 这里的keys_dict就是花名册,pairs中的每一个二元组中,左边的为具体的人,右边的为他得到的评级。本来dict预期的结果是
{'a': [1, 0, 0], 'b': [0, 1, 0], 'c': [0, 0, 1]}
????????结果实际输出为
{'a': [1, 1, 1], 'b': [1, 1, 1], 'c': [1, 1, 1]}
????????而且在print(dict)后面加上print(padding_vector),padding_vector的结果也是[1, 1, 1]
????????但把代码中的dict[key] = padding_vector修改为dict[key] = [0, 0, 0]就可以输出预期结果了。个人推测,python中的字典中的某个key如果直接等于某个对象,那么实际操作不是复制一份对象放在字典里,而是建立一个索引,指向这个对象。因此在最初的代码中,所有键值均指向padding_vector,修改键对应的值也是在修改padding_vector。
|