我遇到过这种奇怪的行为,但没能解释清楚。以下是一些基准:
py -3 -m timeit "tuple(range(2000)) == tuple(range(2000))"
10000 loops, best of 3: 97.7 usec per loop
py -3 -m timeit "a = tuple(range(2000)); b = tuple(range(2000)); a==b"
10000 loops, best of 3: 70.7 usec per loop
为什么比较变量赋值比使用一个临时变量的班轮快27% 以上?
通过 Python 文档,垃圾收集在此期间被禁用,因此不可能是这样。这是某种优化吗?
结果也可以在 Python 2.x 中重现,尽管范围较小。
运行 Windows 7/10,CPython 3.5.1到3.10.1,Intel i73.40 GHz,64位操作系统和 Python。似乎我曾经在 Intel i73.60 GHz 和 Python 3.5.0上运行过的另一台机器并不能重现这个结果。
使用相同的 Python 进程和 timeit.timeit()
@10000循环运行,结果分别是0.703和0.804。仍然显示,虽然程度较轻。(? 12.5%)