この質問を読んで、Pythonが次のような式を評価するのに(漸近的に言えば)どれくらいの時間がかかるのだろうと思いました
{1,2}=={2,1}
つまり、セット クラスの 2 つのインスタンスが等しいかどうかを確認します。
セット間の比較は、1848 行の関数によって実装されますset_richcompare
setobject.c
。等式が次のように実装されていることがわかります。
セットのサイズが同じでない場合は、false を返します。
両方のセットがハッシュされていて、ハッシュが異なる場合は、false を返します。
コールしset_issubset
ます。
2 つのセットのサブセット テストは次のようになります。
while (set_next(so, &pos, &entry)) {
int rv = set_contains_entry((PySetObject *)other, entry);
if (rv == -1)
return NULL;
if (!rv)
Py_RETURN_FALSE;
}
Py_RETURN_TRUE;
最初のセットのすべての要素を反復処理してから、他のセットの各要素を検索することで機能することがわかります。そのため (多くのハッシュ衝突がない限り)、これは最初のセットのサイズに比例します。