web-dev-qa-db-ja.com

dictリテラル構文がdictコンストラクターよりも好ましいのはなぜですか?

Python dictコンストラクタは、リテラル構文を使用するよりも遅いのはなぜですか?

同僚との激しい議論の後、私はいくつかの比較を行い、次の統計を得ました。

python2.7 -m timeit "d = dict(x=1, y=2, z=3)"
1000000 loops, best of 3: 0.47 usec per loop

python2.7 -m timeit "d = {'x': 1, 'y': 2, 'z': 3}"
10000000 loops, best of 3: 0.162 usec per loop

コンストラクタが遅い理由は何ですか?そして、どのような状況で、それがより速いでしょうか?

26
Fabz

コンストラクターはdict()関数を呼び出してオブジェクトを作成するので遅くなりますが、コンパイラーはdictリテラルを BUILD_MAP バイトコード、関数呼び出しを保存します。