Steven D'Aprano wrote: > Immutable objects are those that cannot be changed in place: you have to > create a new object. Tuples, frozensets, strings, ints, floats are all > immutable. They are hashable.
Tuples are special: there are hashable and unhashable tuples. To be hashable all items in a tuple have to be hashable: >>> a = 1, 2 >>> hash(a) 3713081631934410656 >>> b = 1, [] >>> hash(b) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list' Instances of custom classes are special, too; by default they are hashable and mutable. That is possible without messing things up too much because instead of the instance's data they use its id() to calculate the hash value (and object equality). This is obvious in older Python versions like Python 2.6.4 (r264:75706, Dec 7 2009, 18:43:55) [GCC 4.4.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> class A: pass ... >>> a = A() >>> id(a) 140312106243352 >>> hash(a) 140312106243352 >>> id(a) == hash(a) True but the principle also applies in 2.7 and 3.1 and above. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor