编辑:我已经测试了性能,无法将差异复制到任何重要级别。
这是字节码——感谢@john machine指出了不一致之处。
>>> 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
使用A
CALL_FUNCTION
而不是
INPLACE_ADD
. 任何细微的性能差异都可以归结为这一点。