为比特串联,为什么列表比字符数组更快

前端之家收集整理的这篇文章主要介绍了为比特串联,为什么列表比字符数组更快前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

我不明白的一件事是,为什么方法3(可变字符阵列)导致比方法4(加入字符串列表)明显更慢的性能

它们都是可变的,我认为它们应具有相似的性能.

最佳答案
“它们都是可变的”会误导你一点.

确实,在list-append方法中,列表是可变的.但建立清单并不是缓慢的部分.如果你有1000个平均长度为1000的字符串,你就会对数组进行1000000次突变,但只有1000个突变到列表中(加上1000个增量到字符串对象).

特别是,这意味着阵列必须花费1000倍的时间来扩展(分配新存储并复制到目前为止的全部内容).

list方法的缓慢部分是最后的str.join调用.但这不是可变的,也不需要任何扩展.它使用两次传递,首先计算所需的大小,然后将所有内容复制到其中.

此外,str.join中的代码已经(并且自9年前开始编写该文章以来一直有很多工作要优化它),因为它是一种非常常见且推荐的习惯用法,许多真正的程序依赖于每一个天;数组几乎没有被触及,因为它首次被添加到语言中.

但是,如果你真的想要了解这些差异,你必须看看来源.在2.7中,数组方法的主要工作是在array_fromstring,而list方法的主要工作是在string_join.你可以看到后者如何利用我们已经知道所有字符串的事实在开始时加入,而前者不能.

猜你在找的Python相关文章