【发布时间】:2021-10-31 04:02:14
【问题描述】:
当我将相同的float 值重新插入到我的集合中几次时,应该花费恒定时间的x in s 检查变得非常慢。为什么?
定时输出x in s:
0.06 microseconds
0.09 microseconds
0.16 microseconds
0.56 microseconds
1.00 microseconds
1.58 microseconds
2.55 microseconds
5.98 microseconds
10.50 microseconds
24.54 microseconds
40.39 microseconds
96.60 microseconds
160.24 microseconds
419.08 microseconds
732.27 microseconds
代码(Try it online!):
from timeit import timeit
s = {float('nan')}
for _ in range(15):
for _ in [*s]:
x = float('nan')
s.add(x)
time = timeit('x in s', number=1000, globals=globals()) * 1e3
print('%7.2f microseconds' % time)
【问题讨论】:
-
您可能有兴趣知道这在 Python 3.10 中已“修复”:使用您的代码,在 Python 3.9.9 下运行时,我从最终迭代中获得 433.57µs,在 Python 3.10 下获得 0.04µs .1。请参阅bugs.python.org/issue43475 了解更多信息。
标签: python performance set