[issue46684] Expose frozenset._hash classmethod

Raymond Hettinger report at bugs.python.org
Tue Feb 8 17:24:51 EST 2022


Raymond Hettinger <raymond.hettinger at gmail.com> added the comment:

> Why not expose the C implementation via a frozenset._hash()
> classmethod, and change Set._hash() to merely call that?

The frozenset.__hash__ method is tightly bound to the internals of real sets to take advantage of the hash values already being known for real sets.  So we can't just expose it to ABC sets.

Also, the ABC sets need to be kept in sync with an __eq__ method, so users really need to see what Set._hash is actually doing.

Lastly, pure python hashable sets based on the ABC are not common, so it doesn't warrant a C fast path.  If C fast paths were offered, the union, intersection, and difference methods would more important targets.

So, thanks for the suggestion but it isn't as straight-forward as exposing existing code and it might make it harder for implementer to stay synced with an __eq__ method.

Tangential thought:  If you do implement __hash__ with Set._hash, consider using a cached_property decorator.

----------
nosy: +rhettinger
resolution:  -> rejected
stage:  -> resolved
status: open -> closed
type:  -> performance
versions: +Python 3.11

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue46684>
_______________________________________


More information about the Python-bugs-list mailing list