hashable
An object is hashable if it has a hash value which never changes during its lifetime (it needs a __hash__()
method), and can be compared to other objects (it needs an __eq__()
method). Hashable objects which compare equal must have the same hash value.
Hashability makes an object usable as a dictionary key and a set member, because these data structures use the hash value internally.
All of Python’s immutable built-in objects are hashable; mutable containers (such as lists or dictionaries) are not. Objects which are instances of user-defined classes are hashable by default. They all compare unequal (except with themselves), and their hash value is derived from their id()
.
>>> a = 1
>>> a.__hash__()
1
>>> hash(a)
1
>>> a = 1.2
>>> hash(a)
461168601842738689
>>> import collections
>>> isinstance([2,3], collections.Hashable)
False
>>> isinstance(2, collections.Hashable)
True
>>> a = {[2,3]:1}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
immutable
An object with a fixed value. Immutable objects include numbers, strings and tuples. Such an object cannot be altered. A new object has to be created if a different value has to be stored. They play an important role in places where a constant hash value is needed, for example as a key in a dictionary.
mutable
Mutable objects can change their value but keep their id()
.
Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same value.(因为内存re-use)
CPython implementation detail: This is the address of the object in memory.