Chinaunix首页 | 论坛 | 博客
  • 博客访问: 149148
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2020-12-30 16:49
文章分类
文章存档

2021年(48)

2020年(3)

我的朋友

分类: Python/Ruby

2021-01-04 15:54:10

## 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)


复制代码
```


>本期推送整理了初学者可能会用到的Python资料,含有书籍/视频/在线文档和编辑器/源
代码,关于`Python`的安装qun:850973621




## 2、我的理解VS正确答案


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


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


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


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


![image.png](https://upload-images.jianshu.io/upload_images/25205170-6c5218f33bb6ecb9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)







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


![image.png](https://upload-images.jianshu.io/upload_images/25205170-d30e0e63de6b97fa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)







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


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


![image.png](https://upload-images.jianshu.io/upload_images/25205170-d033c49055cfbe38.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)







![image.png](https://upload-images.jianshu.io/upload_images/25205170-eb2919eab8c8b3ed.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)







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


![image.png](https://upload-images.jianshu.io/upload_images/25205170-56f869a6cb3e5937.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)






原文链接:


阅读(1762) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~