社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python 刷题笔记:这很不python,官方大大能改下吗?

刘娟娟🍀PRESS.ONE • 5 年前 • 382 次点击  
阅读 34

Python 刷题笔记:这很不python,官方大大能改下吗?

惊讶:数值相等的整数或浮点数作为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 所指向的视为同一项!

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

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

image

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

image

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

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

image

image

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

image

3、小结与未完成困惑

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49372
 
382 次点击