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

f-string与string.join时间复杂度是否等价?实现原理及性能问询

f-string与str.join()的时间复杂度及性能对比

先看示例代码:

one = 'one'
two = 'two'
three = 'three'

result_1 = f'{one}{two}{three}'
result_2 = ''.join([one, two, three])

时间复杂度是否等价?

对于固定数量的字符串拼接,两者实际时间消耗接近,但理论表述有差异:

  • str.join()的时间复杂度是O(total_length),其中total_length是所有输入字符串的总长度——它会先计算总长度,一次性分配内存,再逐个拷贝内容,属于严格的线性时间复杂度。
  • f-string处理固定数量变量时,底层同样是预先计算总长度、一次性分配内存后完成拼接,实际时间复杂度也是O(total_length)。但因为拼接的字符串数量是常量,有人会简化表述为O(1),但本质仍与总长度线性相关。

f-string的拼接实现原理

Python的f-string在编译阶段就会完成解析,核心流程是:

  1. 识别f-string内的所有占位符,计算每个占位符对应的字符串值。
  2. 预先统计所有待拼接字符串的总长度,向内存池申请一块连续的足够内存。
  3. 将各个字符串的内容依次拷贝到该内存块中,最终返回拼接后的字符串对象。

和早期的+拼接(每次拼接都创建新字符串、重复分配内存,时间复杂度O(n²))不同,f-string和join()采用的都是单次内存分配+批量拷贝的模式,避免了重复内存开销。

大量字符串拼接时的性能表现

当需要拼接的字符串数量极大时:

  • str.join()更适配场景:可以直接接收列表、生成器等可迭代对象,不需要在f-string里写大量占位符,代码可读性更强。
  • 性能差距极小:两者底层的内存分配与拷贝逻辑几乎一致,实际运行时间相差无几。
  • 内存占用有细微差异:如果是动态生成的大量字符串(比如从生成器获取),join()可以直接传入生成器,无需提前把所有字符串加载到列表,内存占用更优;而f-string无法直接接收生成器,必须提前准备好所有字符串,内存开销略大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:25:18