从最近的一个 SO 问题(参见 Create a dictionary in python which is indexed by lists)中,我意识到我可能对 python 中可散列和不可变对象(immutable对象)的含义有一个错误的概念。
- hashable 在实践中是什么意思?
- hashable 和 immmutable 是什么关系?
- 是否存在可散列的可变对象或不可散列的不可变对象(immutable对象)?
最佳答案
Hashing是将一些大量数据以可重复的方式转换为更少量(通常是单个整数)的过程,以便可以在恒定时间内在表中查找它(O(1)
),这对于高性能算法和数据结构很重要。
Immutability是指对象在创建后不会以某种重要方式发生变化,尤其是可能会改变该对象的哈希值的任何方式。
这两个想法是相关的,因为用作哈希键的对象通常必须是不可变的,因此它们的哈希值不会改变。如果允许更改,那么该对象在诸如哈希表之类的数据结构中的位置将发生更改,然后散列提高效率的整个目的就落空了。
要真正掌握这个想法,您应该尝试用 C/C++ 等语言实现自己的哈希表,或者阅读 HashMap
类的 Java 实现。
关于python - 可散列的,不可变的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671376/