二级python 刷题就能过吗_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 所指向的視為同一項!
這個推論準確嗎?如何驗證推論是否準確?
首先,確認整數和浮點數都可以作為字典的鍵存在。
其次,數值相等的整數和浮點數先后作為字典的鍵時,會如何?寫寫代碼試試看。
仔細觀察發現,字典的鍵不會發生改變,字典的值發生覆蓋:最先設為字典的鍵的類型,如果是整數,則總是整數,如果是浮點數,則總是浮點數。只有字典的值會發生覆蓋。
這個觀察準確嗎?再寫點代碼,檢查下字典的鍵的類型是否發生變化。
經過上面的探索可知,數學意義上數值相等的整數或浮點數先后設為字典的鍵時,鍵的類型會與最初保持一致;但在調用該鍵時,整數或浮點數都可以,指向的是該字典的同一項!
3、小結與未完成困惑
這實在詭異。我雖然暫時不明白為什么,但總算確定該現象的存在了!整理好這篇筆記,發出來給高手們指點一下,看看能否找到為什么吧!
BTW,這個現象不符合認知慣性啊,明明整數 1 ,字符串 '1' 和浮點數 1.0 是不同類型,為什么它們不會成為該字典的三個鍵??希望未來 python 能升級改掉這種情況……
總結
以上是生活随笔為你收集整理的二级python 刷题就能过吗_Python 刷题笔记:这很不python,官方大大能改下吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 命名空间不能直接包含字段或方法之类的成员
- 下一篇: n个人选k个c语言_leetcode之第