疯狂的Python-02(不变的哈希值)
2018-09-03 本文已影响13人
景行1023
一些有趣的鲜为人知的Python特性集合
无论你是Python新手还是Python老手,我相信,这个系列的文章都会让你获益良多!
阅读此系列任何文章前请务必观看:疯狂的Python-目录大纲
▶ 不变的哈希值
1.
some_dict = {}
some_dict[5.5] = "Ruby"
some_dict[5.0] = "JavaScript"
some_dict[5] = "Python"
Output:
>>> some_dict[5.5]
"Ruby"
>>> some_dict[5.0]
"Python"
>>> some_dict[5]
"Python"
"Python" 把之前的 "JavaScript" 覆盖掉了吗?
💡 解释
- Python的字典结构是根据key值的哈希值判断两个key值是否相等的
- 在Python中,不变对象(Immutable objects)的值如果一样,那么它们的哈希值肯定也一样
注意: 有些对象有不同的值,但是它们的哈希值也有可能是一样的(所谓的哈希冲突)>>> 5 == 5.0 True >>> hash(5) == hash(5.0) True
- 当
some_dict[5] = "Python"
这句话执行的时候, "Python"这个字符串就会覆盖掉"JavaScript"这个值,因为在Python看来,5
和5.0
的哈希值是一样的,也就是说对于字典结构他们对应的是一个key值。 - 在 StackOverflow 上面有一个回答对Python的这个特性解释的很棒。