On Sun, Mar 22, 2020 at 07:59:59PM -0000, Steve Jorgensen wrote:
> Currently, the `issubset` and `issuperset` methods of set objects
> accept arbitrary iterables as arguments. An iterable that is both a
> subset and superset is, in a sense, "equal" to the set. It would be
> inappropriate for `==` to return `True` for such a comparison,
> however, since that would break the `Hashable` contract.
I think the "arbitrary iterables" part is a distraction. We are
fundamentally talking about a comparison on sets, even if Python relaxes
the requirements and also allows one operand to be a arbitrary iterable.
I don't believe that a set A can be both a superset and subset of
another set B at the same time. On a Venn Diagram, that would require A
to be both completely surrounded by B and B to be completely surrounded
by A at the same time, which is impossible.
I think you might be talking about sets which partially overlap:
A = {1, 2, 3, 4}
B = {2, 3, 4, 5}
but neither the issubset nor issuperset methods return True in that
case:
* A is not a subset of B because 1 is not in B;
* A is not a superset of B because it lacks 5;
* B is not a subset of A because 5 is not in A;
* and B is not a superset of A because it lacks 1.
You are right that it would be inappropriate to return equal, but
nothing to do with Hashable since sets aren't hashable. They are not
equal because, well, they ain't equal :-)
> Should sets have an additional method, something like `like(other)`,
> `issimilar(other)`, or `isequivalent(other)`, that returns `True` for
> any iterable that contains the all of the items in the set and no
> items that are not in the set?
That would be equality :-)
A = {1, 2, 3, 4}
B = {1, 2, 3, 4}
B contains all of the items in A and no items which are not in A;
likewise A contains all the items in B and no items not in B. That makes
them equal.
I might be missing something obvious, but I really don't think that
`<set>.issubset(other) and <set>.issuperset(other)` can be true.
--
Steven
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/N3RURYO323Z2GLJNSURD52HUVW6PIJOH/
Code of Conduct: http://python.org/psf/codeofconduct/