|
|
1
89
Hashing
是以可重复的方式将大量数据转换成更小数据量(通常是单个整数)的过程,以便可以在固定时间内在表中查找数据(
Immutability 一个对象在创建之后不会以某种重要的方式改变,特别是以任何可能改变该对象哈希值的方式。 这两个概念是相关的,因为用作哈希键的对象通常必须是不可变的,这样它们的哈希值就不会改变。如果允许更改,则该对象在数据结构(如哈希表)中的位置将发生更改,然后为提高效率而进行哈希处理的整个目的就失败了。
|
|
2
15
哈希类型
|
|
|
3
8
虽然没有一个内置的可变对象是可散列的,但是可以使用 不 |
|
4
7
从技术上讲,hashable意味着类定义
尽管如此,要定义一个可变的对象是困难的,但也许不是不可能的
|
|
|
5
4
即使不可变和可散列之间没有显式关系,由于它们之间的相互作用,也存在隐式关系
这里没有问题,除非你重新定义
很难看到一个应用程序在哪里这是可能的,考虑一个可能的类
A
注意
|
|
|
6
4
不可变意味着对象在其生存期内不会发生任何显著的变化。在编程语言中,这是一个模糊但普遍的概念。
所有用户定义的类都具有
声明的任何新类的对象都可以用作字典键,除非通过抛出
我们可以说所有不可变对象都是可哈希的,因为如果哈希在对象的生存期内发生变化,则意味着对象发生了变化。 但不完全是。考虑一个具有列表(可变)的元组。有人说元组是不可变的,但同时它有点不可散列(throws)。
|
|
|
7
3
正因为这是Google最热门的内容,这里有一个简单的方法可以使可变对象可散列:
实际上,在创建一个类来将SQLAlchemy记录转换成对我来说更有用的可变内容时,我发现了这样的用法,同时保持了它们作为dict键使用的哈希性。 |
|
|
8
1
在Python中,它们基本上是可以互换的;因为散列应该表示内容,所以它和对象一样是可变的,并且让对象更改散列值会使其无法用作dict键。 在其他语言中,哈希值更多地与对象的“标识”相关,而不一定与值相关。因此,对于可变对象,可以使用指针来启动哈希。当然,假设一个对象没有在内存中移动(就像某些GC那样)。例如,这就是Lua中使用的方法。这使得可变对象可用作表键;但是给新手带来了一些(不愉快的)惊喜。 最后,拥有一个不可变的序列类型(tuples)使“多值键”变得更好。 |
|
|
9
0
Hashable意味着一个变量的值可以用一个常量来表示(或者,更确切地说,是编码的)——字符串、数字等等。现在,可以改变的东西(可变的)不能用不可变的东西来表示。因此,任何可变的变量都不能是可哈希的,同样地,只有不可变的变量才能是可哈希的。 希望这有帮助。。。 |
|
|
Emanuel Pinho · 无不变目标push的角度变化检测策略 8 年前 |
|
|
MingtyeP · 如何使用不可变js取消移动列表中的每个元素? 8 年前 |
|
|
Brannon · 让赋值运算符在申报时工作 8 年前 |
|
|
Javallion · JAVA中的不可变对象初始化 8 年前 |
|
|
Ankush Pandit · 字符串与字符串数组元素之间的比较 8 年前 |
|
|
plamkata__ · Swift到Kotlin,管理不可变列表 8 年前 |