You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python字符串拼接特殊场景:为何+=比普通赋值更高效?

字符串拼接中+=与普通赋值的性能差异疑问

我用Python 3.11编写了如下测试代码:

import timeit

code_1 = """
initial_string = ''
for i in range(10000):
    initial_string = initial_string + 'x' + 'y'
"""

code_2 = """
initial_string = ''
for i in range(10000):
    initial_string += 'x' + 'y'
"""

time_1 = timeit.timeit(code_1, number=100)
time_2 = timeit.timeit(code_2, number=100)

print(time_1)
# 0.5770808999950532
print(time_2)
# 0.08363639999879524

这里+=的效率明显更高,但我认为两者拼接次数相同、执行顺序也不影响结果。我知道字符串是不可变类型,这不是原地操作的原因,且我了解的字符串拼接优化多针对.join,我不是要找最高效的方式,只是想理解为什么+=比普通赋值更高效。


而在单字符拼接的场景下,两种形式性能几乎一致:

import timeit

code_1 = """
initial_string = ''
for i in range(10000):
    initial_string = initial_string + 'x'
"""

code_2 = """
initial_string = ''
for i in range(10000):
    initial_string += 'x'
"""

time_1 = timeit.timeit(code_1, number=100)
time_2 = timeit.timeit(code_2, number=100)

print(time_1)
# 0.07953230000566691
print(time_2)
# 0.08027460001176223

我还注意到,在使用'x' + 'y'的场景下,不同Python版本的性能差异明显:

  • Python 3.7至3.9:
print(time_1)
# ~0.6
print(time_2)
# ~0.3
  • Python 3.10:
print(time_1)
# ~1.7
print(time_2)
# ~0.8
  • Python 3.11:
print(time_1)
# ~0.6
print(time_2)
# ~0.1

有一个类似问题提到:

如果s是字符串,s = s + 'c'可能会原地修改字符串,而t = s + 'c'则不行。但s + 'c'操作怎么知道自己处于哪种场景?

简单来说,当s = s + 'c'时会触发优化,t = s + 'c'则不会,因为Python需要保留原字符串的引用,无法进行原地拼接。

但在我的场景中,两种方式都是将结果赋值给原变量,理论上都应该适用原地拼接优化,这让我感到疑惑。

内容的提问来源于stack exchange,提问作者Dorian Turba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 19:14:55