zoukankan      html  css  js  c++  java
  • 23-3 hash 方法

    hash方法

    1. 层数据结构基于hash值寻址的优化操作
    2. hash是一个算法
    3. 能够把某一个要存在内存里的值通过一系列计算,
    4. 保证不同值的hash结果是不一样的
    hash(obj)      #obj内部必须实现了__hash__方法

    假设:    得到一个哈希值

    '127647862861596'  哈希==> 927189778748

    对同一个值在多次执行python代码的时候hash值是不同
    但是对同一个值 在同一次运行python代码的时候hash值永远不变


    print(hash('abc'))      # 6048279107854451739   同一次运行print(hash('abc'))     # 6048279107854451739print(hash('abc'))   # 6048279107854451739print(hash('abc'))    # 6048279107854451739print(hash('abc'))    # 6048279107854451739print(hash('abc'))    # 6048279107854451739

    想想为什么字典寻址比较快?
     # 字典的寻址  - hash算法
    
    d = {'key':'value'}
    hash - 内置函数
    
    # 假如hash(key)= 297111XXX ,得到了物理地址   (key是可哈希的)
    # 我们就把value 存在这个地址里    (想想C的指针)
    # 这样就很快,取值d = {'key':'value'}    ,不像列表循环取值
    View Code

    想想set集合是如何去重的?

    se = {1,2,2,3,4,5,'a','b','d','f'}
    print(se)       # {1, 2, 3, 4, 5, 'd', 'f', 'b', 'a'}
    
    # 是因为把每个值哈希一下,通过哈希得到的结果存到内存,当取到的值哈希结果也是一样的,所以把他存在内存中,就相当于覆盖了。
    
    # 所以好像不是很保险?加入哈希值恰巧一样了,不都覆盖了吗??
    # 非也,set集合先判断哈希是否想等,再判断值是否相等
    #那我们为什么不直接先判断值相等?  愚蠢,效率啊! 哈希值快得多! 所以先哈希,实在相等了,再判断值嘛(概率很小哇)

    字典也是一样的

    d = {'key':'v1','key':'v2'}
    print(d['key'])    #v2
  • 相关阅读:
    C#获取视频文件播放长度
    ViewState跨页传值
    radio点击事件
    js屏蔽鼠标右键
    js获取url参数
    js页面跳转
    android 界面刷新功能
    android RadioButton单选按钮效果
    android TextView实现跑马灯效果(字体滚动)
    android 圆角效果
  • 原文地址:https://www.cnblogs.com/zhuangdd/p/12637742.html
Copyright © 2011-2022 走看看