python循环往列表list里存放字典dict无效,结果都为最后一个字典dict

项目场景:

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)

简化后正确代码

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值