python - 可散列的,不可变的

标签 python data-structures hash immutability

从最近的一个 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/

相关文章:

php - Django 为同一模型创建不同的表

mysql - vb6 哈希密码中的 MD5

javascript - 在jquery中的url( anchor )中获取许多#hash值

c++ - Splay Tree Zig-Zag & Zag-Zig 旋转问题

algorithm - 在不使用递归/堆栈的情况下打印给定文件夹和子文件夹中的所有文件

ruby-on-rails - Rails session 数据 - 存储在哈希中

python - 通过 groupby 连接 pandas Dataframe

python - App Engine Standard 上的 Postgres - 插入时出错

Python:正则表达式提取html中任意两个标签之间的文本

algorithm - Geometry:计算几何,计算所有的 friend 点对