答案 0 :(得分:20)
集合之间的比较由function set_richcompare
in setobject.c
, line 1848实现。您将看到相等性实现如下:
如果集合的大小不同,则返回false。
如果两个集合都已经过哈希处理,并且哈希值不同,则返回false。
致电set_issubset
。
两组的子集测试如下所示:
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;
你会看到它的工作原理是迭代第一组的所有元素,然后在另一组中查找每一个元素。所以(除非有很多哈希冲突),这在第一组的大小上是线性的。