美文网首页
python字典哈希冲突

python字典哈希冲突

作者: 隐墨留白 | 来源:发表于2019-08-16 16:56 被阅读0次

    在GitHub看的题,做个笔记。

    some_dict = {}
    some_dict[5.5] = "Ruby"
    some_dict[5.0] = "JavaScript"
    some_dict[5] = "Python"
    print(some_dict[5.5],some_dict[5.0],some_dict[5])
    "Ruby" "Python" "Python"
    

    为什么会这样呢?some_dict[5]将some_dict[5.0]覆盖掉了。
    大家都知道整形和浮点型都是不可变类型,但是对于字典来说它们是不是唯一的呢?

    print(id(5.0),id(5))
    print(5.0 == 5)
    print(hash(5.0) == hash(5))
    
    125207608 1704830176
    True
    True
    

    虽然存储地址不同,但是显然他们的值相同,且对于字典来说5与5.0具有相同哈希值,所以some_dict[5]会覆盖some_dict[5.0]。

    说明:

    • Python字典检查相等性并比较哈希值以确定两个键是否相同。
    • 具有相同值的不可变对象在Python中始终具有相同的哈希值。
      注意:具有不同值的对象也可能具有相同的哈希值(称为哈希冲突)。
    • some_dict[5] = "Python"执行语句时,现有值“JavaScript”被“Python”覆盖,因为Python识别5并且5.0与字典的键相同some_dict。

    所以以后使用字典的时候要注意啊。

    相关文章

      网友评论

          本文标题:python字典哈希冲突

          本文链接:https://www.haomeiwen.com/subject/pzjqsctx.html