python - `extend` 比 `+=` 快吗?

标签 python performance list

在 python 中,我们可以通过两种方式连接列表:

  1. lst.extend(another_lst)
  2. lst += another_lst

我认为 extend 会比使用 += 更快,因为它会重用列表而不是使用其他两个创建新列表。

但是当我用 timeit 测试时,结果是 += 更快,

>>> timeit('l.extend(x)', 'l = range(10); x = range(10)')
0.16929602623
>>> timeit('l += x', 'l = range(10); x = range(10)')
0.15030503273
>>> timeit('l.extend(x)', 'l = range(500); x = range(100)')
0.805264949799
>>> timeit('l += x', 'l = range(500); x = range(100)')
0.750471830368

我放在timeit中的代码有问题吗?

最佳答案

编辑:我已经测试了性能,但我无法将差异复制到任何显着水平。


这是字节码——感谢@John Machin 指出不一致之处。

>>> import dis
>>> l = [1,2,3]
>>> m = [4,5,6]
>>> def f1(l, m):
...     l.extend(m)
...
>>> def f2(l,m):
...     l += m
...
>>> dis.dis(f1)
  2           0 LOAD_FAST                0 (l)
              3 LOAD_ATTR                0 (extend)
              6 LOAD_FAST                1 (m)
              9 CALL_FUNCTION            1
             12 POP_TOP
             13 LOAD_CONST               0 (None)
             16 RETURN_VALUE
>>> dis.dis(f2)
  2           0 LOAD_FAST                0 (l)
              3 LOAD_FAST                1 (m)
              6 INPLACE_ADD
              7 STORE_FAST               0 (l)
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE

请注意,extend 使用了 CALL_FUNCTION 而不是 INPLACE_ADD。任何微不足道的性能差异都可能归因于此。

关于python - `extend` 比 `+=` 快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4176980/

相关文章:

python - python 字典中的键值一致性

java - 从 ArrayList 中移除第 i 个元素

android - 解析大文本文件效率

c# - 三元运算符叠加

python - 将两个列表与列表或无值合并的有效方法

python - 使用 python 更改嵌套列表中的值

python - 根据 diff 过滤 DataFrame,其中 bool 值重复

python - 如何将 spark 数据帧保存到 HDFS 上的 csv?

python - 如何强制 NumPy 始终使用精度(float32、float64 ...)?

MySQL:高效地返回组不为空的分组字段