Il confronto tra i set è implementato dallo function set_richcompare
in setobject.c
, line 1848. Vedrete che l'uguaglianza è implementato come segue:
Se i set non hanno la stessa dimensione, restituire false.
Se entrambi gli insiemi sono stati sottoposti a hash e gli hash sono diversi, restituire false.
Chiama set_issubset
.
Il test sottoinsieme per due set si presenta in questo modo:
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;
Vedrai che funziona mediante iterazione su tutti gli elementi del primo set e poi guardando ognuno nell'altro impostato. Quindi (a meno che non ci siano molte collisioni hash) questo è lineare nella dimensione del primo set.
fonte
2012-09-12 14:27:20