继这个问题后,我很想知道什么时候是python对象的哈希计算?
__init__时候,__hash__()叫,__hash__()被称为,或这可能会根据对象的类型而有所不同吗?
为什么hash(-1) == -2其他整数与哈希相等?
显然,在Python中检查两个字符串是否相等你可以这样做:
\n\n"hello word" == "hello world"
但是,如果您要比较很长的字符串(超过 100 万个字符)怎么办?python 中是否有内置方法或任何库可以更快地完成此操作;也许利用 Karp\xe2\x80\x93Rabin 算法或类似的算法?
\n\n或者,在幕后, stringA == stringB 实际上是最快的方法吗?
\n我有一长串的整数,我想把它变成MD5哈希.最快的方法是什么?我尝试了两个选项,两者都相似.只是想知道我是否错过了一种明显更快的方法.
import random
import hashlib
import cPickle as pickle
r = [random.randrange(1, 1000) for _ in range(0, 1000000)]
def method1(r):
p = pickle.dumps(r, -1)
return hashlib.md5(p).hexdigest()
def method2(r):
p = str(r)
return hashlib.md5(p).hexdigest()
def method3(r):
p = ','.join(map(str, r))
return hashlib.md5(p).hexdigest()
Run Code Online (Sandbox Code Playgroud)
然后在iPython中计时:
timeit method1(r)
timeit method2(r)
timeit method3(r)
Run Code Online (Sandbox Code Playgroud)
给我这个:
In [8]: timeit method1(r)
10 loops, best of 3: 68.7 ms per loop
In [9]: timeit method2(r)
10 loops, best of 3: 176 ms per loop
In [10]: timeit method3(r)
1 …Run Code Online (Sandbox Code Playgroud)