键赋值往list中添加dict,前面所有字典总被最后一个覆盖

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()

 

posted @ 2018-11-10 17:18  Hsinwang  阅读(847)  评论(0编辑  收藏  举报