gpt4 book ai didi

python - 添加和扩展两个列表之间的奇怪时间差异

转载 作者:行者123 更新时间:2023-12-04 00:52:49 26 4
gpt4 key购买 nike

如果我有两个列表,我可以使用 + 运算符或 .extend() 方法将它们连接起来。两者做同样的事情。

但如果我执行 list1=list1+list2,它需要(在我的例子中)接近 0.048ms。相反,如果我执行 list1.extend(list2),它需要 <0.001ms(我的情况也是如此)。

如果他们做同样的事情,为什么会有这么大的差异?如果它慢得多,我应该在什么时候使用 + 有什么区别?

最佳答案

您想一起比较两个代码段吗? dis 模块是你的 friend 。

In [3]: dis.dis("l1=[1, 2, 3];l2=[4, 5, 6];l1=l1+l2")                                                                                                                                                       
1 0 LOAD_CONST 0 (1)
2 LOAD_CONST 1 (2)
4 LOAD_CONST 2 (3)
6 BUILD_LIST 3
8 STORE_NAME 0 (l1)
10 LOAD_CONST 3 (4)
12 LOAD_CONST 4 (5)
14 LOAD_CONST 5 (6)
16 BUILD_LIST 3
18 STORE_NAME 1 (l2)
20 LOAD_NAME 0 (l1)
22 LOAD_NAME 1 (l2)
24 BINARY_ADD
26 STORE_NAME 0 (l1)
28 LOAD_CONST 6 (None)
30 RETURN_VALUE

In [4]: dis.dis("l1=[1, 2, 3];l2=[4, 5, 6];l1.extend(l2)")
1 0 LOAD_CONST 0 (1)
2 LOAD_CONST 1 (2)
4 LOAD_CONST 2 (3)
6 BUILD_LIST 3
8 STORE_NAME 0 (l1)
10 LOAD_CONST 3 (4)
12 LOAD_CONST 4 (5)
14 LOAD_CONST 5 (6)
16 BUILD_LIST 3
18 STORE_NAME 1 (l2)
20 LOAD_NAME 0 (l1)
22 LOAD_METHOD 2 (extend)
24 LOAD_NAME 1 (l2)
26 CALL_METHOD 1
28 POP_TOP
30 LOAD_CONST 6 (None)
32 RETURN_VALUE

In [5]:

如您所见,这里的区别在于第一个代码的以下部分:

         24 BINARY_ADD
26 STORE_NAME

和第二个的后续内容:

         22 LOAD_METHOD              2 (extend)
26 CALL_METHOD 1
28 POP_TOP

第二个代码中的所有三个指令与第一个代码中的 BINARY_ADD 指令大致一样耗时。他们实际上在做类似的工作,将一个列表中的项目添加到另一个列表中。但是第一个代码中额外的 STORE_NAME 导致它变慢,因为创建一个新对象并将其存储在内存中需要时间。

关于python - 添加和扩展两个列表之间的奇怪时间差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65171320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com