2024-04-26 04:02:34 发布
网友
在下面链接的文章中,作者比较了python中不同字符串连接方法的效率: http://www.skymind.com/~ocrow/python_string/
我不明白的一点是,为什么方法3(可变字符数组)的性能比方法4(加入字符串列表)慢得多
它们都是可变的,我认为它们应该具有可比的性能。在
“两者都是可变的”有点误导你。在
在list append方法中,list是可变的。但建立这个名单并不是一个缓慢的过程。如果有1000个平均长度为1000的字符串,则对数组执行1000000个突变,但对列表只执行1000个突变(加上对字符串对象的1000个增量)。在
特别是,这意味着array将花费1000倍的时间进行扩展(目前为止分配新存储并复制整个内容)。在
array
list方法的慢部分是末尾的str.join调用。但这并不是易变的,也不需要任何扩展。它使用两个过程,首先计算所需的大小,然后将所有内容复制到其中。在
str.join
另外,str.join中的代码已经做了大量的工作来优化它(自从9年前写那篇文章以来一直在做),因为它是一个非常常见的,并且被推荐的习惯用法,许多真正的程序每天都依赖它;array自从第一次被添加到语言中以来几乎没有被触及过。在
但是,如果你真的想了解其中的差异,你就必须看看源头。在2.7中,array方法的主要工作在^{}中,而list方法的主要工作在^{}中。你可以看到后者是如何利用这样一个事实,即我们已经知道我们将要连接的所有字符串,而前者不能
“两者都是可变的”有点误导你。在
在list append方法中,list是可变的。但建立这个名单并不是一个缓慢的过程。如果有1000个平均长度为1000的字符串,则对数组执行1000000个突变,但对列表只执行1000个突变(加上对字符串对象的1000个增量)。在
特别是,这意味着
array
将花费1000倍的时间进行扩展(目前为止分配新存储并复制整个内容)。在list方法的慢部分是末尾的
str.join
调用。但这并不是易变的,也不需要任何扩展。它使用两个过程,首先计算所需的大小,然后将所有内容复制到其中。在另外,
str.join
中的代码已经做了大量的工作来优化它(自从9年前写那篇文章以来一直在做),因为它是一个非常常见的,并且被推荐的习惯用法,许多真正的程序每天都依赖它;array
自从第一次被添加到语言中以来几乎没有被触及过。在但是,如果你真的想了解其中的差异,你就必须看看源头。在2.7中,array方法的主要工作在^{} 中,而list方法的主要工作在^{} 中。你可以看到后者是如何利用这样一个事实,即我们已经知道我们将要连接的所有字符串,而前者不能
相关问题 更多 >
编程相关推荐