散列

散列值与相等性

等值对象的散列值必须相等。散列相等未必等值。

散列表算法

散列表算法

其他说明

  • key必须是可散列的。
    • 可散列需要有hasheq做支撑,并且保证==相等时一定有hash相等
    • 在对象的生命周期内,散列值会保持不变
    • 原子不可变类型(str,bytes和数值类型)可散列
    • frozenset可散列
    • tuple当且仅当所有元素可散列时,可散列
    • 用户自定义类型对象可散列,值为其id()
  • 字典造成内存上的开销
    • Python会设法保证三分之一的bucket是空的,达到阈值时会被复制到一个更大的空间
    • 当记录数量巨大时,用namedtuple是比json格式更好的节约空间的选择
    • 自定义类型中,用slots将实例的存储方式由dict改变成tuple,但是注意,优化是可维护性的对立面。
  • 不要在迭代过程中对字典进行更改。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容