[Python-Dev] Hashable memoryviews

Antoine Pitrou solipsis at pitrou.net
Sun Nov 13 13:08:11 CET 2011


On Sun, 13 Nov 2011 13:05:24 +0100
Stefan Krah <stefan at bytereef.org> wrote:
> Nick Coghlan <ncoghlan at gmail.com> wrote:
> > > With slices or the new casts (See: http://bugs.python.org/issue5231,
> > > implemented in http://hg.python.org/features/pep-3118#memoryview ),
> > > it is possible to have different hashes for equal objects:
> > 
> > Note that Antoine isn't suggesting that the underlying hash be *used*
> > as the memoryview's hash (that would be calculated according to the
> > same rules as the equality comparison). Instead, the ability to hash
> > the underlying object would just gate whether or not you could hash
> > the memoryview at all.
> 
> I think they necessarily have to use the same hash, since:
> 
> exporter = m1 ==> hash(exporter) = hash(m1)
> m1 = m2 ==> hash(m1) = hash(m2)
> 
> Am I missing something?

The hash must simply be calculated using the same algorithm (which
can even be shared as a subroutine). It's already the case for more
complicated types:

>>> hash(1) == hash(1.0) == hash(Decimal(1)) == hash(Fraction(1))
True

Also, I think it's reasonable to limit hashability to one-dimensional
memoryviews.

Regards

Antoine.




More information about the Python-Dev mailing list