私はC++のような言語で、クラス内で定義された仮想メソッドの呼び出しが非仮想メソッドを呼び出すよりも遅い理由を理解しています(呼び出すには正しい実装を参照するために動的ディスパッチテーブルを調べる必要があります)。なぜメソッドが遅いですか?
しかし、Pythonで、私が持っている場合:私は何を得ることはありませんが、なぜある
list_of_sets = generate_a_list_containg_a_bunch_of_sets()
intersection_of_all = reduce(set.intersection, list_of_sets)
:
list_of_sets = generate_a_list_containg_a_bunch_of_sets()
intersection_of_all = reduce(list_of_sets[0].intersection, list_of_sets)
これは劇的に(40%についての私の実験で)より遅いですそれは非常に遅くする必要があります、メソッドのルックアップ(私は思います)は、呼び出しを減らすために発生するので、交差のメソッドが実際に呼び出される削減の内部は再び見上げる必要はありません(ちょうど再利用同じメソッド参照)。
私の理解に間違いがある場合、誰かを照らすことができますか?
この差分が表示されますか多くの小さなセット、またはいくつかの大きなセットの場合は?私は最初のケースで問題にバインドする問題を期待しますが、実際の交差作業がオーバーヘッドを支配する後者では問題にはなりません。私は2つの矛盾する答え(そのうちの1つは2回)を見て、どちらが正しいのか分からない。 – ugoren
小さい(約10セットのリスト)と中規模(ランダムに生成された約100セットのリスト)の両方のためのものでした。その理由は、以下の彼の答えでSvenによって説明された。 –