报错代码简化版:
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'])
运行结果:
可以看到,本来只将字典a[k1]的值赋值给b[k1],b[k2]的值居然也改变了。
原因:dict.fromkeys()给字典b的所有key赋予了相同的初始值,而碰巧这个初始值是可改变的。
正确做法:用dict.fromkeys()初始化字典时,赋值为不可变变量0或None。
可以看出,一切正常!
结论
任何变量的初始化赋值,要么为空(None)、要么为不可变对象(数字、元祖、字符串)。千万不要初始化为可变对象(列表,字典)。