为什么列表比字符数组快

2024-04-26 04:02:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面链接的文章中,作者比较了python中不同字符串连接方法的效率: http://www.skymind.com/~ocrow/python_string/

我不明白的一点是,为什么方法3(可变字符数组)的性能比方法4(加入字符串列表)慢得多

它们都是可变的,我认为它们应该具有可比的性能。在


Tags: 方法字符串comhttpstring链接www文章
1条回答
网友
1楼 · 发布于 2024-04-26 04:02:34

“两者都是可变的”有点误导你。在

在list append方法中,list是可变的。但建立这个名单并不是一个缓慢的过程。如果有1000个平均长度为1000的字符串,则对数组执行1000000个突变,但对列表只执行1000个突变(加上对字符串对象的1000个增量)。在

特别是,这意味着array将花费1000倍的时间进行扩展(目前为止分配新存储并复制整个内容)。在

list方法的慢部分是末尾的str.join调用。但这并不是易变的,也不需要任何扩展。它使用两个过程,首先计算所需的大小,然后将所有内容复制到其中。在

另外,str.join中的代码已经做了大量的工作来优化它(自从9年前写那篇文章以来一直在做),因为它是一个非常常见的,并且被推荐的习惯用法,许多真正的程序每天都依赖它;array自从第一次被添加到语言中以来几乎没有被触及过。在

但是,如果你真的想了解其中的差异,你就必须看看源头。在2.7中,array方法的主要工作在^{}中,而list方法的主要工作在^{}中。你可以看到后者是如何利用这样一个事实,即我们已经知道我们将要连接的所有字符串,而前者不能

相关问题 更多 >

    热门问题