我有两个用户定义的对象,比如a和b。
这两个对象具有相同的hash值。
然而,id(a)和id(b)是不平等的。
此外,
>>> a is b
False
>>> a == b
True
根据这个观察,我能推断出以下几点吗?
不平等对象可能具有相同的hash值。
相等的对象需要具有相同的id值。
每当调用obj1 is obj2时,都会比较两个对象的id值,而不是它们的hash值。
我在大学的一个项目中遇到了一个问题,我们必须在一个类中编写一个双哈希方法,它返回一个双哈希字符串对象。考虑到Java语言中有一个内置的hashCode()方法,我认为这会相对简单,但是当您第二次迭代hashCode时,它似乎返回完全相同的值。例如:
StringHashCode.java:
public class StringHashCode implements HashCode{
@Override
public int giveCode(Object obj) {
return obj.hashCode();
}
}
spell.java
whi
我一直在我的项目中工作(我也在使用EMF比较法)。我需要为我使用的每个对象保留一个唯一的ID,这就是我决定使用IdentityHashCode的原因,据我所知,通过编译,这个值是相同的。
我已经在另一个类的方法中将对象作为参数给出了,但是当我试图获取哈希代码时,这与我打印对象的值时所看到的不一样。
就像这样:
System.out.println("The Object is: "+obj)
System.out.println("The hash ID is: +Integer.toHexString(System.identityHashCode(obj)));
但
当在字符串上使用Python内置的hash()函数时,我只是在玩它,这时我注意到了一些奇怪的东西。通常,正常的散列函数应该是不相关的,从hash(A)的意义上说,hash(B)应该是完全不可识别的(对于不相关/不可识别的足够的定义)。
然而,这个快速的小脚本显示的不是。
In [1]: for i in range(15):
...: print hash('test{0}'.format(i))
...:
-5092793511388848639
-5092793511388848640
-5092793511388848637
-509279351138884863
我想使自定义对象散列可用(通过酸洗)。我可以为Python2.x找到__hash__算法(参见下面的代码),但是显然与Python3.2的哈希不同(我不知道为什么?)有人知道__hash__是如何用Python3.2实现的吗?
#Version: Python 3.2
def c_mul(a, b):
#C type multiplication
return eval(hex((int(a) * b) & 0xFFFFFFFF)[:-1])
class hs:
#Python 2.x algorithm for hash from http://effbo