mirror of
https://github.com/python/cpython.git
synced 2025-11-13 15:40:05 +00:00
- Issue #18440: Clarify that hash() can truncate the value returned from an
object's custom `__hash__()` method.
This commit is contained in:
commit
4958f714bd
3 changed files with 27 additions and 8 deletions
|
|
@ -587,11 +587,16 @@ are always available. They are listed here in alphabetical order.
|
||||||
|
|
||||||
.. function:: hash(object)
|
.. function:: hash(object)
|
||||||
|
|
||||||
Return the hash value of the object (if it has one). Hash values are integers.
|
Return the hash value of the object (if it has one). Hash values are
|
||||||
They are used to quickly compare dictionary keys during a dictionary lookup.
|
integers. They are used to quickly compare dictionary keys during a
|
||||||
Numeric values that compare equal have the same hash value (even if they are of
|
dictionary lookup. Numeric values that compare equal have the same hash
|
||||||
different types, as is the case for 1 and 1.0).
|
value (even if they are of different types, as is the case for 1 and 1.0).
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
For object's with custom :meth:`__hash__` methods, note that :func:`hash`
|
||||||
|
truncates the return value based on the bit width of the host machine.
|
||||||
|
See :meth:`__hash__` for details.
|
||||||
|
|
||||||
.. function:: help([object])
|
.. function:: help([object])
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1264,10 +1264,21 @@ Basic customization
|
||||||
|
|
||||||
Called by built-in function :func:`hash` and for operations on members of
|
Called by built-in function :func:`hash` and for operations on members of
|
||||||
hashed collections including :class:`set`, :class:`frozenset`, and
|
hashed collections including :class:`set`, :class:`frozenset`, and
|
||||||
:class:`dict`. :meth:`__hash__` should return an integer. The only required
|
:class:`dict`. :meth:`__hash__` should return an integer. The only
|
||||||
property is that objects which compare equal have the same hash value; it is
|
required property is that objects which compare equal have the same hash
|
||||||
advised to somehow mix together (e.g. using exclusive or) the hash values for
|
value; it is advised to somehow mix together (e.g. using exclusive or) the
|
||||||
the components of the object that also play a part in comparison of objects.
|
hash values for the components of the object that also play a part in
|
||||||
|
comparison of objects.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
:func:`hash` truncates the value returned from an object's custom
|
||||||
|
:meth:`__hash__` method to the size of a :c:type:`Py_ssize_t`. This is
|
||||||
|
typically 8 bytes on 64-bit builds and 4 bytes on 32-bit builds. If an
|
||||||
|
object's :meth:`__hash__` must interoperate on builds of different bit
|
||||||
|
sizes, be sure to check the width on all supported builds. An easy way
|
||||||
|
to do this is with
|
||||||
|
``python -c "import sys; print(sys.hash_info.width)"``
|
||||||
|
|
||||||
If a class does not define an :meth:`__eq__` method it should not define a
|
If a class does not define an :meth:`__eq__` method it should not define a
|
||||||
:meth:`__hash__` operation either; if it defines :meth:`__eq__` but not
|
:meth:`__hash__` operation either; if it defines :meth:`__eq__` but not
|
||||||
|
|
|
||||||
|
|
@ -581,6 +581,9 @@ Tests
|
||||||
Documentation
|
Documentation
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
- Issue #18440: Clarify that `hash()` can truncate the value returned from an
|
||||||
|
object's custom `__hash__()` method.
|
||||||
|
|
||||||
- Issue #17844: Add links to encoders and decoders for bytes-to-bytes codecs.
|
- Issue #17844: Add links to encoders and decoders for bytes-to-bytes codecs.
|
||||||
|
|
||||||
- Issue #14097: improve the "introduction" page of the tutorial.
|
- Issue #14097: improve the "introduction" page of the tutorial.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue