项目场景:
python字典dict循环往列表list里存放问题描述:
循环改变字典dict中的值再存放入列表list中,最后列表里的字典无效,都为最后一个字典。简易化的错误代码:(以等线为分割每次循环)
datas = []
data = dict()
data['a'] = 1
data['b'] = '2'
datas.append(data)
print(datas)
print('='*20)
data['b'] = 1
datas.append(data)
print(datas)
运行结果:
等线上方是第一次放入list的,等线下方是第二次。正常应该是在第一次的基础上往后加dict,但结果却都变为了最后一个放入的dict。
原因分析:
data = dict() 这里只定义了一个dict,往后的改动实际上也都指向这一个,就算存入list中,list里面的dict也还是和外面的dict指向同一个。解决方案:
最简单的方法,每次循环重新定义一次dict。就是每次不要都指向同一个dict即可。
简化后正确的代码:
data = dict()
data['a'] = 1
data['b'] = '2'
datas.append(data)
print(datas)
print('=' * 20)
data = dict()
data['a'] = 1
data['b'] = 1
datas.append(data)
print(datas)