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

Python中str = str + new_data比str += new_data慢的原因探究

为什么str = str + new_data比str += new_data慢这么多?

核心原因是Python中的字符串是不可变对象,两种写法的底层实现完全不同:

  • 用str = str + new_data时,每次执行都会创建一个全新的字符串对象:它需要把原str的全部内容和new_data的内容都复制到新内存空间,再让变量str指向这个新对象,旧字符串会被丢弃。循环次数越多,每次要复制的内容就越长——比如第1000次循环时,要复制的内容是前999次累加的总长度加上新行长度,总时间复杂度为O(n²)。对2MB内容来说,重复复制会累积出明显耗时;到50MB时,O(n²)的复杂度会让操作量呈指数级增长,自然要跑好几分钟。

  • 而str += new_data是Python专门优化过的操作,并非简单的str = str + new_data语法糖。对于字符串,Python会尝试在原字符串的内存空间末尾直接扩展(内存允许的情况下),不需要每次复制整个旧字符串,只追加新数据,时间复杂度接近O(n)。所以哪怕是2MB内容也能瞬间完成,50MB场景下效率也会高得多。

如果处理更大的文件,更推荐用列表收集所有行,最后用''.join(list)合并——列表的append操作是O(1)的,join时只需要一次内存分配和复制,效率比str +=更稳定,尤其数据量极大时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:42:35