Pythonのdict()と{}で違いがあるらしいと聞いたので、調べてみました。
{}
と dict()
の違い
-
{}
(リテラル)
リテラルを使用して直接辞書型オブジェクトを作成します。my_dict = {}
-
dict()
(コンストラクター)
dict
クラスのコンストラクターを呼び出して辞書型オブジェクトを作成します。my_dict = dict()
dict()
を使用すると、関数呼び出しのオーバーヘッドが発生するため、{}
を使用するよりも実行速度が遅くなります。しかし、関数呼び出しのオーバーヘッドはせいぜいナノ秒オーダーのため、パフォーマンス的には無視できるレベルです。
実行速度の比較
以下のコードで、{}
と dict()
を使用して辞書を作成する際の実行時間を比較しました。
※手元の環境で試したため、実行環境によっては差が出る恐れがあります。
import timeit
# {}を使用して辞書を作成
time_literal = timeit.timeit("my_dict = {}", number=1_000_000)
# dict()を使用して辞書を作成
time_func = timeit.timeit("my_dict = dict()", number=1_000_000)
print(f"{{}}: {time_literal} 秒")
print(f"dict(): {time_func} 秒")
実行結果
{}: 0.026 秒
dict(): 0.045 秒
100万回実行して約0.019秒の差が出ました。1回あたり約19ナノ秒(10^-9 秒)ですね。
結論
関数呼び出しのオーバーヘッドはナノ秒オーダーであるため、通常の開発では dict()
を使用してもほぼパフォーマンスには影響がないです。パフォーマンスに非常にシビアな状況でなければ、どちらの方法を使用してもいいと思います。しかし、そもそもこのレベルでパフォーマンスがシビアな場合は、Pythonではなく他の言語を使用したほうがいいと思います。