#!/usr/bin/env python import timeit class myfloat(float): def __hash__(self): if self != self: # self is NaN return object.__hash__(self) return super().__hash__(self) def insert(n_insertions, keytype): m = {} for i in range(n_insertions): m[keytype("nan")] = 1 def bench(n, typename): return timeit.timeit(f"insert({n}, keytype={typename})", setup="from __main__ import insert, myfloat", number=1) def runall(typename): n = 1 for i in range(16): print("%12d %10.6f" % (n, bench(n, typename))) n *= 2 if __name__ == "__main__": for t in ("float", "myfloat"): print("Running with type {0}".format(t)) print("%12s %10s" % ("#insertions", "time")) runall(t)