Python 集合(set) 创建实例效率

set创建方式

1
2
3
4
5
# 字面值创建方式
s = {1, 2, 3}

# 构造方法创建方式
s = set([1, 2, 3])

两种创建实例方式反汇编

1
2
3
4
5
6
7
8
9
10
11
12
>>> from dis import dis
>>> dis('{1}')
1 0 LOAD_CONST 0 (1)
2 BUILD_SET 1
4 RETURN_VALUE
>>> dis('set([1])')
1 0 LOAD_NAME 0 (set)
2 LOAD_CONST 0 (1)
4 BUILD_LIST 1
6 CALL_FUNCTION 1
8 RETURN_VALUE
>>>

可以看出,通过字面值去创建一个集合,在解释器实现上是通过调用了一个叫做 BUILD_SET 的方法直接创建;

而使用 set() 方法创建集合,解释器实现上会先通过 set 的名字去寻找构造方法,并且调用 BUILD_LIST 方法去创建一个 list 传入 set 构造方法,从而创建一个集合。


所以结论为:使用字面值直接创建集合要比使用 set 构造方法效率更高。


同理地,list() 构造方法和 [] 字面值创建列表的效率也很容易得出高低:

1
2
3
4
5
6
7
8
>>> dis('[]')
1 0 BUILD_LIST 0
2 RETURN_VALUE
>>> dis('list()')
1 0 LOAD_NAME 0 (list)
2 CALL_FUNCTION 0
4 RETURN_VALUE
>>>
Author: SmallXeon
Link: https://hexo.chensmallx.top/2022/05/12/python-set-performance/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
一些推广链接
几个便宜量大的小✈场: FASTLINK, YToo, 论坛邀请注册: ,
便宜量大但是稳定性不足的VPS: Virmach, 价格略贵但好用的VPN: , ,