Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
224a599c
Commit
224a599c
authored
Jul 15, 2013
by
Barry Warsaw
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- Issue #18440: Clarify that `hash()` can truncate the value returned from an
object's custom `__hash__()` method.
parent
48830035
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
8 deletions
+27
-8
Doc/library/functions.rst
Doc/library/functions.rst
+9
-4
Doc/reference/datamodel.rst
Doc/reference/datamodel.rst
+15
-4
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Doc/library/functions.rst
View file @
224a599c
...
...
@@ -583,11 +583,16 @@ are always available. They are listed here in alphabetical order.
.. function:: hash(object)
Return the hash value of the object (if it has one). Hash values are
integers.
They are used to quickly compare dictionary keys during a dictionary lookup.
Numeric values that compare equal have the same hash value (even if they are of
different types, as is the case for 1 and 1.0).
Return the hash value of the object (if it has one). Hash values are
integers. They are used to quickly compare dictionary keys during a
dictionary lookup. Numeric values that compare equal have the same hash
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])
...
...
Doc/reference/datamodel.rst
View file @
224a599c
...
...
@@ -1264,10 +1264,21 @@ Basic customization
Called by built-in function :func:`hash` and for operations on members of
hashed collections including :class:`set`, :class:`frozenset`, and
:class:`dict`. :meth:`__hash__` should return an integer. The only required
property is that objects which compare equal have the same hash value; it is
advised to somehow mix together (e.g. using exclusive or) the hash values for
the components of the object that also play a part in comparison of objects.
:class:`dict`. :meth:`__hash__` should return an integer. The only
required property is that objects which compare equal have the same hash
value; it is advised to somehow mix together (e.g. using exclusive or) the
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
:meth:`__hash__` operation either; if it defines :meth:`__eq__` but not
...
...
Misc/NEWS
View file @
224a599c
...
...
@@ -210,6 +210,9 @@ Tests
Documentation
-------------
-
Issue
#
18440
:
Clarify
that
`
hash
()`
can
truncate
the
value
returned
from
an
object
's custom `__hash__()` method.
- Issue #17953: Mention that you shouldn'
t
replace
sys
.
modules
and
deleting
key
items
will
cause
Python
to
not
be
happy
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment