在python中,为什么s*3比s+s+s快?

In python, why is s*3 faster than s+s+s?

我正在浏览 google 的 python 介绍,发现 s * 3s + s + s 快,其中 s类型 string.

发生这种情况的原因是什么?

我 googled 找到了 which is faster s+='a' or s=s+'a' in python。但这并没有帮助

因为s * 3是一次操作,而s + s + s是两次操作;它实际上是 (s + s) + s,创建一个额外的字符串对象,然后被丢弃。

您可以通过使用 dis 查看每个生成的字节码来了解差异:

s + s + s:

  3           0 LOAD_FAST                0 (s)
              3 LOAD_FAST                0 (s)
              6 BINARY_ADD          
              7 LOAD_FAST                0 (s)
             10 BINARY_ADD          
             11 RETURN_VALUE    

s * 3:

  3           0 LOAD_FAST                0 (s)
              3 LOAD_CONST               1 (3)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE    

你也可以在这里自己测试一下:

import timeit

print(timeit.timeit("string=''; string='s'+'s'+'s'", number=10000))
print(timeit.timeit("string2=''; string2='s'*3", number=10000))

我的猜测是 s*3 将其视为一个操作,而 s+s+s 将其视为两个操作。