小编典典

可哈希的,不可变的

python

从最近的一个SO问题(请参阅在python中创建由列表索引的字典)中,我意识到我可能对python中可哈希和不可变对象的含义有错误的理解。

  • 在实践中,hashable是什么意思?
  • 可哈希和不可修改之间有什么关系?
  • 是否存在可哈希的可变对象或不可哈希的不可变对象?

阅读 307

收藏
2021-01-20

共1个答案

小编典典

散列是将大量数据以可重复的方式转换为少量(通常是单个整数)的过程,以便可以在表格中以固定时间(O(1))查找数据,这对于高性能很重要算法和数据结构。

不变性是一个想法,即对象创建后将不会以某种重要方式更改,尤其是可能会更改该对象的哈希值的任何方式。

这两个想法是相关的,因为用作哈希键的对象通常必须是不可变的,因此它们的哈希值不会改变。如果允许更改,则该对象在诸如哈希表之类的数据结构中的位置将发生变化,从而破坏了哈希效率的整个目的。

要真正理解这个想法,您应该尝试使用C / C ++之HashMap类的语言来实现自己的哈希表,或者阅读该类的Java实现。

2021-01-20