cra*_*ael 5 python benchmarking set python-3.x python-internals
我有兴趣找到在 Python 中初始化空集的最快方法(我使用的是 3.8)。{}您不能像创建 那样实例化空集dict,因此通常建议使用set()构造函数。前几天我注意到还有另一种方法来实例化空集:您可以将空元组解压()到{...}集合的语法中,如下所示:{*()}。timeit使用in 中的模块对此进行计时ipython会得到以下结果:
%timeit {*()}\n67.7 ns \xc2\xb1 1.68 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\n\n%timeit set()\n84.5 ns \xc2\xb1 2.57 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n我发现这很奇怪 -set()相对于{*()}. 过去也曾对例如[]vs.list()和{}vs.进行过相同的观察dict()。
%timeit []\n17.8 ns \xc2\xb1 0.791 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 100000000 loops each)\n%timeit list()\n81 ns \xc2\xb1 1.56 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\n\n%timeit {}\n18.6 ns \xc2\xb1 0.575 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 100000000 loops each)\n%timeit dict()\n98.6 ns \xc2\xb1 5.09 ns per loop (mean \xc2\xb1 std. dev. of 7 runs, 10000000 loops each)\nRun Code Online (Sandbox Code Playgroud)\n{}切换到原始语法以及[]forlist和s相当容易dict,但我发现的集合显然不那么干净。我很好奇对此的见解(一般而言)。