WKPlus
2015-08-28 19:37:27 +08:00
数据说话:
In [18]: d={i:2*i for i in xrange (1000000 )}
In [19]: %timeit 10000 in d
10000000 loops, best of 3: 97.9 ns per loop
In [20]: d={str (i ):2*i for i in xrange (1000000 )}
In [21]: %timeit "10000" in d
10000000 loops, best of 3: 92 ns per loop
看到数据有点吃惊,但转念一想 dict 查找或者插入都先是 hash , hash 之后都是 int 了,比较也是比较的 hash 后的值(除了冲突的时候),所以就再比较一下 str 和 int 计算 hash 的效率:
In [24]: %timeit hash (12312093810298310928301 )
10000000 loops, best of 3: 81.7 ns per loop
In [25]: %timeit hash ("12312093810298310928301")
10000000 loops, best of 3: 78.5 ns per loop
如果有冲突,就需要值比对了,理论上来说这时候就需要对 str 进行比较了,应该比较慢了,但是还没有好的方法去寻找两个 hash 值一样的 str ,所以暂时无法测试