覆盖自定义对象的__hash__()
方法的常用方法是使用对象属性生成元组t
并应用return hash(t)
,如此this question中所述。
我有一个程序这样做,在运行cProfile之后,我发现这种方法是我程序的瓶颈。我做了以下测试并得到了结果:
>>> t1 = tm.Timer(setup="x = str((10,12))", stmt="hash(x)")
>>> t2 = tm.Timer(setup="x = (10,12)", stmt="hash(x)")
>>> min(t1.repeat(100)), min(t2.repeat(100))
(0.04663395881652832, 0.05523419380187988)
我从中得出结论,在哈希函数上使用字符串的速度比
使用元组。鉴于我已经为我班级的每个对象提供了__repr__()
实现,我觉得不应该有任何问题。在更改我的程序之前,这种方法是否存在任何问题(或者我的测试方法学)?