在下面链接的文章中,作者比较了python中不同字符串连接方法的效率:http: //www.skymind.com/~ocrow/python_string/
我不明白的一件事是,为什么方法3(可变字符阵列)导致比方法4(加入字符串列表)明显更慢的性能
它们都是可变的,我认为它们应具有相似的性能.
“它们都是可变的”有点误导你。
确实,在 list-append 方法中,列表是可变的。但建立清单并不是最慢的部分。如果您有 1000 个平均长度为 1000 的字符串,则将对数组进行 1000000 次突变,但仅对列表进行 1000 次突变(加上对字符串对象的 1000 个增量)。
特别是,这意味着array必须花费 1000 倍的时间进行扩展(分配新存储并复制整个内容)。
列表方法最慢的部分是str.join最后的调用。但这是不可改变的,并且不需要任何扩展。它使用两次传递,首先计算所需的大小,然后将所有内容复制到其中。
此外,内部代码str.join已经(并且自 9 年前写那篇文章以来一直在)大量的工作来优化它,因为它是许多实际程序每天都依赖的非常常见且推荐的习惯用法;array自从它第一次被添加到语言中以来,几乎没有被触及。
但如果你真的想了解其中的差异,你就必须看看源头。在 2.7 中,数组方法的主要工作在 中array_fromstring,而列表方法的主要工作在 中string_join。您可以看到后者如何利用我们已经知道要在开始时连接的所有字符串这一事实,而前者则不能。