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

1、刷题遇到知识盲区

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

题目如下:

What gets printed?

confusion = {}

confusion[1] = 1

confusion['1'] = 2

confusion[1.0] = 4

sum = 0

for 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 能升级改掉这种情况……

二级python 刷题就能过吗_Python 刷题笔记:这很不python,官方大大能改下吗?相关推荐

  1. python中一切内容都可以称为_Python中对象的概念很广泛,Python中的一切内容都可以称为 。...

    患者血浆PT延长,中对n中蝰蛇毒时间(RVVT)正常,下列哪一项正确( ). 概念"????"可以单独构成单词的意思是( )? 切内以下关于药品零售企业管理说法不正确的是 容都&q ...

  2. python的应用领域有哪些、选择题_Python测试题(题)

    Python 题(共 100 分) 一 . (共 18 题, 1 题 5 分,共 90 分) 1. 以下是 Python 比较运算符中的等 于的是 ( ) A. >= B. <= C. = ...

  3. python一只青蛙一次可以_python算法题 python123网站单元四题目

    下面向大家介绍几个python算法题. 一:二分法求平方根 1.题目要求为 2.输入输出格式为 3.博主解题的思路 这道题在c语言中是一道经典的题目,可以用循环,或者递归,在这里我们用python来写 ...

  4. python语言的三个主要特点_python干货|新总结的4个python语言的特点,这几个细节值得关注...

    [摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行各业之中,并被大家所熟知,所以也有越来越多的python学习者关注py ...

  5. python的缩进规则是什么意思_Python编程思想(2):Python主要特性、命名规则与代码缩进...

    目录 那么什么是动态语言呢? 那么什么是弱类型语言和强类型语言呢? Python命名规则 缩进原则 李宁老师的<Python编程思想>上线了,囊括了Python的核心技术,以及Python ...

  6. python数据表元素不为空值_python 填充空值失败_怎么用 Python 做数据分析实例

    01 生成数据表 第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据. Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导 ...

  7. python好用的内置库_Python开发哪些库好?老男孩Python学习班

    近年来,伴随着人工智能时代的到来,也促使Python编程语言发展,因此Python成为公认的人工智能编程语言.之所以Python受欢迎,得益于其内置大量的库,那么Python开发有哪些基本库呢?这六大 ...

  8. python基础语法第3关古灵阁_python入门题:输入输出练习

    以下是Python基础语法的练习,项目要求和代码如下: """ 例3:小精灵:你好,欢迎古灵阁,请问您需要帮助吗?需要or不需要? 你:需要 小精灵:请问你需要什么帮助呢 ...

  9. python找1000以内的完数_Python编程题3--找出1000以内的完全数

    题目 如果一个数恰好等于它的因子之和,则称该数为"完全数",又称完美数或完备数.例如: 第一个完全数是6,它有约数1.2.3.6,除去它本身6外,其余3个数相加,1+2+3=6. ...

最新文章

  1. live2dmesh渲染优先级_live2dsdk的opengl示例详解
  2. 从零开始编写一个vue插件
  3. CSS3 Media Queries 详细介绍与使用方法,Responsive Web Design 必备技术, 响应式设计
  4. mysql遍历 xml文件路径_解决Mapper接口和mapper.xml的文件位置问题
  5. 条款34:区分接口继承和实现继承(Different between inheritance of interface and inheritance of implemenation)...
  6. 计算机二级教程第十章答案,2012年计算机二级VFP考试第十章课后练习题及答案...
  7. redis 过期删除策略和淘汰策略 -redis设计与实现笔记
  8. 电脑从硬盘启动计算机,电脑如何设置固态硬盘启动
  9. openssl的微缩图计算
  10. 面经_京东广告部_实习_广告推荐_I面_20191105
  11. 各种主流浏览器的调试
  12. 13 年的 Bug 调试经验总结(来自蜗牛学院)
  13. 视频直播制作软件:MimoLive Mac v5.2b2
  14. Json - 学习/实践
  15. SaaSBase:推荐一些超好用的低代码开发软件(中篇)
  16. UE4Lamplight_预结算光照情景
  17. 汽车ELV报废车辆指令测试
  18. Android Verified Boot dm-verity 优化和实战
  19. vue echarts全国地图和区域地图 map
  20. 锐捷网络 C++ 提前批

热门文章

  1. Python教程:threading中join与setDaemon的用法及区别讲解
  2. Python的__getattribute__ vs __getattr__的妙用
  3. python 使用dir() help() 查看一个对象所有拥有的方法和属性
  4. 贴片铝电容识别及型号_贴片钽电容封装及规格和参数资料
  5. java 分布式sql引擎_分布式SQL查询引擎 Presto 性能调优的五大技巧
  6. mysql怎么计算某个字段重复的个数_2020最新版MySQL数据库面试题(一)
  7. pycharm奇技淫巧 直接通过代码输出函数 refactor —— extract method
  8. IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boo
  9. 卷积神经网络CNNs 为什么要用relu作为激活函数?
  10. python 程序开发以及推荐机制设计