python - 为什么迭代一个小字符串比一个小列表慢?

标签 python performance cpython timeit python-internals

我在玩 timeit 并注意到对一个小字符串执行简单的列表理解比对一个小的单个字符串列表执行相同的操作花费更长的时间。有什么解释吗?这几乎是时间的 1.35 倍。

>>> from timeit import timeit
>>> timeit("[x for x in 'abc']")
2.0691067844831528
>>> timeit("[x for x in ['a', 'b', 'c']]")
1.5286479570345861

导致这种情况的较低级别发生了什么?

最佳答案

当您迭代大多数容器对象(列表、元组、字典……)时,迭代器会传递容器中的对象。

但是当你遍历一个字符串时,必须为每个传递的字符创建一个新对象——字符串不是“容器”,就像列表是容器一样。在迭代创建这些对象之前,字符串中的各个字符不作为不同的对象存在。

关于python - 为什么迭代一个小字符串比一个小列表慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861468/

相关文章:

python - GAE 管理的虚拟机 : Possible to use C-based Python libraries with standard runtime?

python - 将 BST 转换为排序列表

c++ - std::map::find 的效率与值的数据大小有关吗?

performance - Postgres 中有多少个表分区太多?

java - 如何真正对 Java 应用程序的内存使用情况进行基准测试

python - 使用可变 C 数组从 C 线程调用 Python 函数

python - 根据条件连接列表中的字符串和整数

Python 和函数式编程 : is there an apply() function?

python - 如何让 CPython 2.7 使用 __pycache__ 目录?

python - pypy pickled 不能被 cpython unpickled