出于同样的原因
[]比快
list();
解释器包括对使用特殊代码路径的基于语法的操作的专门支持,而构造函数调用涉及:
- 从内置范围加载构造函数(需要一对
dict
查找,一个在全局范围内,然后在失败时在内置范围内另一个) - 需要通过通用的可调用调度机制和通用的参数解析代码进行调度,所有这些均比单字节代码(将其所有参数作为C数组从堆栈中读取)的成本高得多。
所有这些优点都与 固定 开销有关。两种方法的big-
O相同,因此
{*range(10000)}不会显着/可靠地快于set(range(10000)),因为实际的构造工作大大超过了通过通用调度加载和调用构造函数的开销。



