栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Python中,“。append()”和“ + = []”之间有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Python中,“。append()”和“ + = []”之间有什么区别?

对于您而言,唯一的区别是性能: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
会将一个项目添加到列表中,而
+=
将右侧列表的 所有 元素复制到左侧列表中。

更新:性能分析

比较字节码,我们可以假设

append
version在
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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/455797.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号