Modules are hashable?!
Jason Lai
jmlai at uci.edu
Wed Sep 1 06:51:53 EDT 2004
Leif K-Brooks wrote:
> I was just playing around, and noticed that modules seem to be hashable.
> Can anyone explain that, especially given the fact that they're mutable?
>
Most objects in Python are hashable, and also mutable. If you define a
class Foo and create x = Foo(), x will be hashable. But you can also do
x.stuff = 3. So modules appear to be pretty much regular objects, which
are usually hashed by ID -- which will be unique for any two objects.
Try hash(sys) == id(sys) to see for yourself.
Lists, tuples, dicts, strings, and a few other things are odd in that
they're hashed/compared by their contents rather than ID. So you can
have two different objects that are equivalent with regards to hashing
or comparing.
Due to the way hashing works, the hash value is not allowed to change
while it's in a dict. IDs never change, so regular objects have an
unchanging hash value even if you change their contents. For the special
objects, changing the contents would change the hash value, and that's
not allowed.
I think that's how it works, anyway :P
- Jason Lai
More information about the Python-list
mailing list