在Python中,“。append()”和“ + = []”之間有什么區(qū)別?
對(duì)于您而言,唯一的區(qū)別是性能: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 @R_70_4037@ion.>>> 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 @R_70_4037@ion.>>> import timeit>>> timeit.Timer(’s.append('something')’, ’s = []’).timeit()0.23079359499999999>>> timeit.Timer(’s += ['something']’, ’s = []’).timeit()0.44208112500000141
通常情況下,append會(huì)將一個(gè)項(xiàng)目添加到列表中,而+=將右側(cè)列表的 所有 元素復(fù)制到左側(cè)列表中。
比較字節(jié)碼,我們可以假設(shè)appendversion在LOAD_ATTR+CALL_FUNCTION和+ = version-中浪費(fèi)了周期BUILD_LIST。顯然BUILD_LIST大于LOAD_ATTR+ CALL_FUNCTION。
>>> import dis>>> dis.dis(compile('s = []; s.append(’spam’)', ’’, ’exec’)) 1 0 BUILD_LIST 0 3 STORE_NAME 0 (s) 6 LOAD_NAME0 (s) 9 LOAD_ATTR1 (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’)) 1 0 BUILD_LIST 0 3 STORE_NAME 0 (s) 6 LOAD_NAME0 (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開銷來進(jìn)一步提高性能:
>>> timeit.Timer(’a('something')’, ’s = []; a = s.append’).timeit()0.15924410999923566解決方法
之間有什么區(qū)別?
some_list1 = []some_list1.append('something')
和
some_list2 = []some_list2 += ['something']
相關(guān)文章:
1. 如何在python中執(zhí)行另一個(gè)py文件2. 詳解在Python中使用Torchmoji將文本轉(zhuǎn)換為表情符號(hào)3. class類在python中獲取金融數(shù)據(jù)的實(shí)例方法4. 在python中實(shí)現(xiàn)求輸出1-3+5-7+9-......101的和5. 如何在Python中創(chuàng)建二叉樹6. 在Python中如何使用yield7. 在python中使用pyspark讀寫Hive數(shù)據(jù)操作8. next在python中返回迭代器的實(shí)例方法9. call在Python中改進(jìn)數(shù)列的實(shí)例講解10. 在Python中實(shí)現(xiàn)字典反轉(zhuǎn)案例
