【Python】改编字典中一个key的value值,另一个不相关的key-value值也被改变了。

 

报错代码简化版:

a = {'k1': {'name': 'name_k1'}, 
     'k2': {'name': 'name_k2'}}
b = dict.fromkeys(a.keys(), {})

for k in a.keys():
    print('-------------%s------------------' % k)
    print(k)
    print("我是b[k2]的值: ", b['k2'])
    b[k]["name"] = a[k]["name"]
    print("我是b[k2]的值:", b['k2'])

运行结果:

【Python】改编字典中一个key的value值,另一个不相关的key-value值也被改变了。

可以看到,本来只将字典a[k1]的值赋值给b[k1],b[k2]的值居然也改变了。

原因:dict.fromkeys()给字典b的所有key赋予了相同的初始值,而碰巧这个初始值是可改变的。

【Python】改编字典中一个key的value值,另一个不相关的key-value值也被改变了。

正确做法:用dict.fromkeys()初始化字典时,赋值为不可变变量0或None。

【Python】改编字典中一个key的value值,另一个不相关的key-value值也被改变了。

可以看出,一切正常!