为什么 x*=y 在 Python 中比 x=x*y 慢?

Why is x*=y is slower than x=x*y in Python?

我正在尝试优化我在 Python 中编写的一些代码,并且自始至终我都假设在 Python 中编写 [=12] 更有效(或者在最坏的情况下等效) =] 而不是 x = x * y。但是使用下面的基本测试,情况似乎并非如此

import time

t0 = time.time()
x = 1.01
for i in range(1000000):
    x *= 1.000001
print(time.time() - t0)
# Outputs 0.1081240177154541

t0 = time.time()
x = 1.01
for i in range(1000000):
    x = x * 1.000001
print(time.time() - t0)
# Outputs 0.07818889617919922

为什么会这样?

我一直在做休闲测试:

def test1(x):
    for i in range(10000000):
        x *= 1.000001

def test2(x):
    for i in range(10000000):
        x = x * 1.000001


%timeit test1(1.01)
# 511 ms ± 25.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit test2(1.01)
# 591 ms ± 87.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

差别小到可以说性能一样

正如我的结果所示(与您的结论相反),一台机器与另一台机器或一台 运行 其他

的结果可能不同