list = [] a = {'a':'1', 'b':'1'} list.append(a) a['a'] = '2' a['b'] = '2' list.append(a) #最终结果: [{‘a’: ‘2’, ‘b’: ‘2’}, {‘a’: ‘2’, ‘b’: ‘2’}]
原因:append()方法只是将字典的地址存到list中,而键赋值的方式就是修改地址,所以才导致覆盖的问题
解决:使用copy() 或者 deepcopy()
list = [] a = {'a':'1', 'b':'1'} list.append(a.copy()) a['a'] = '2' a['b'] = '2' list.append(a.copy()) print(list) #最终结果: [{‘a’: ‘1’, ‘b’: ‘1’}, {‘a’: ‘2’, ‘b’: ‘2’}]
注:当字典中存在list的时候需要使用deepcopy()