Eq () and hash () in Python: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 18: Line 18:
2. Store (hash_value, key, value) in the bucket at the location hash_value % len(buckets)
2. Store (hash_value, key, value) in the bucket at the location hash_value % len(buckets)


3. If the bucket array needs resizing, **re-use the previously computed hash value** to re-insert all previously stored values. This is why is important that the key is immutable: if the key is mutable and it changes while the key/value pair is stored in the dictionary, lookup and resizing will not work.
3. If the bucket array needs resizing, '''re-use the previously computed hash value''' to re-insert all previously stored values. This is why is important that the key is immutable: if the key is mutable and it changes while the key/value pair is stored in the dictionary, lookup and resizing will not work.

Revision as of 16:17, 11 September 2022

Internal

Overview

__eq__()

__hash__()

Dictionaries and the __hash__() Function

To store a key into a dictionary, Python performs the following sequence:

1. Call __hash__() on the key and compute the hash of the key. If the key is not hashable, raise a TypeError.

2. Store (hash_value, key, value) in the bucket at the location hash_value % len(buckets)

3. If the bucket array needs resizing, re-use the previously computed hash value to re-insert all previously stored values. This is why is important that the key is immutable: if the key is mutable and it changes while the key/value pair is stored in the dictionary, lookup and resizing will not work.