对于您而言,唯一的区别是性能:append是两倍的速度。
Python 3.0 (r30:67507, Dec 3 2008, 20:14:27) [MSC v.1500 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import timeit>>> timeit.Timer('s.append("something")', 's = []').timeit()0.20177424499999999>>> timeit.Timer('s += ["something"]', 's = []').timeit()0.41192320500000079Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> import timeit>>> timeit.Timer('s.append("something")', 's = []').timeit()0.23079359499999999>>> timeit.Timer('s += ["something"]', 's = []').timeit()0.44208112500000141通常情况下,
append会将一个项目添加到列表中,而
+=将右侧列表的 所有 元素复制到左侧列表中。
更新:性能分析
比较字节码,我们可以假设
appendversion在
LOAD_ATTR+
CALL_FUNCTION和+ = version-
中浪费了周期
BUILD_LIST。显然
BUILD_LIST大于
LOAD_ATTR+
CALL_FUNCTION。
>>> import dis>>> dis.dis(compile("s = []; s.append('spam')", '', 'exec')) 10 BUILD_LIST 0 3 STORE_NAME 0 (s) 6 LOAD_NAME 0 (s) 9 LOAD_ATTR 1 (append) 12 LOAD_ConST 0 ('spam') 15 CALL_FUNCTION 1 18 POP_TOP 19 LOAD_ConST 1 (None) 22 RETURN_VALUE>>> dis.dis(compile("s = []; s += ['spam']", '', 'exec')) 10 BUILD_LIST 0 3 STORE_NAME 0 (s) 6 LOAD_NAME 0 (s) 9 LOAD_ConST 0 ('spam') 12 BUILD_LIST 1 15 INPLACE_ADD 16 STORE_NAME 0 (s) 19 LOAD_ConST 1 (None) 22 RETURN_VALUE我们可以通过减少
LOAD_ATTR开销来进一步提高性能:
>>> timeit.Timer('a("something")', 's = []; a = s.append').timeit()0.15924410999923566

![在Python中,“。append()”和“ + = []”之间有什么区别? 在Python中,“。append()”和“ + = []”之间有什么区别?](http://www.mshxw.com/aiimages/31/455797.png)
