首页 > 代码库 > python中字典的陷阱
python中字典的陷阱
把字典与列表组合,如
i=20 s=[]#定义一个空列表 b={‘d‘:i}#定义一个字典 while i>0: i=i-1 b[‘d‘]=i#更新字典的值 s.append(b) print(s)
结果为
[{‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}, {‘d‘: 0}] >>> s[0][‘d‘]=90 >>> s [{‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}, {‘d‘: 90}]
只改变第一个元素,也是这样,
s的每个元素都是同一个字典实例,改变列表任何一个元素中字典的值,就全部改变了
若改为:
i=20 s=[] while i>0: i=i-1 b={‘d‘:i}#每次重新定义b,并赋值 s.append(b) print(s)
结果为
[{‘d‘: 19}, {‘d‘: 18}, {‘d‘: 17}, {‘d‘: 16}, {‘d‘: 15}, {‘d‘: 14}, {‘d‘: 13}, {‘d‘: 12}, {‘d‘: 11}, {‘d‘: 10}, {‘d‘: 9}, {‘d‘: 8}, {‘d‘: 7}, {‘d‘: 6}, {‘d‘: 5}, {‘d‘: 4}, {‘d‘: 3}, {‘d‘: 2}, {‘d‘: 1}, {‘d‘: 0}]
则是我们想要的结果
第一种情况:是每个列表元素,其实是一个实例, 其实循环里只是 在更新字典的值
第二种情况:每次重新定义字典
python中字典的陷阱
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。