绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Python 刷题笔记:这很不python,官方大大能改下吗?
2019-11-28 14:06:53

惊讶:数值相等的整数或浮点数作为dict 字典的键将指向同一项?!

1、刷题遇到知识盲区

今天继续在xue.cn刷题,意外发现:整数和浮点数先后设为字典的键,会有奇怪的现象!

题目如下:

What gets printed?confusion = {}confusion[1] = 1confusion['1'] = 2confusion[1.0] = 4sum = 0for k in confusion: sum += confusion[k]print(sum)复制代码

2、我的理解VS正确答案

暂时找不到精准词汇来描述这一现象,我于是选择写点代码,尝试确认该现象。

答题时我的理解是,整数 1 ,字符串 '1' 和浮点数 1.0 是不同类型,所以它们会成为该字典的三个键,字典中 3 项的值加和 1 + 2 +4 为 7。但正确答案却是 2 + 4 为 6。由此推论,这是把字典的键 整数 1 和 浮点数 1.0 所指向的视为同一项!

这个推论准确吗?如何验证推论是否准确?

首先,确认整数和浮点数都可以作为字典的键存在。

其次,数值相等的整数和浮点数先后作为字典的键时,会如何?写写代码试试看。

仔细观察发现,字典的键不会发生改变,字典的值发生覆盖:先设为字典的键的类型,如果是整数,则总是整数,如果是浮点数,则总是浮点数。只有字典的值会发生覆盖。

这个观察准确吗?再写点代码,检查下字典的键的类型是否发生变化。

经过上面的探索可知,数学意义上数值相等的整数或浮点数先后设为字典的键时,键的类型会与初保持一致;但在调用该键时,整数或浮点数都可以,指向的是该字典的同一项!

3、小结与未完成困惑

这实在诡异。我虽然暂时不明白为什么,但总算确定该现象的存在了!整理好这篇笔记,发出来给高手们指点一下,看看能否找到为什么吧!

BTW,这个现象不符合认知惯性啊,明明整数 1 ,字符串 '1' 和浮点数 1.0 是不同类型,为什么它们不会成为该字典的三个键??希望未来 python 能升级改掉这种情况……


作者:刘娟娟🍀PRESS.ONE

链接:https://juejin.im/post/5dc7de225188255f74377382

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

猿,妙不可言
创建时间:2019-07-05 22:23:45
分享python,及前端一些开发心得、教程。 希望能和各位大佬交朋友~
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 马国栋
    栈主

小栈成员

查看更多
  • ?
  • 栈栈
  • gamebus
  • 呵呵哒
戳我,来吐槽~