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 >>>
|