[EMAIL PROTECTED] writes: > Mike> Tuples have the problem that they are immutable, except when > Mike> they're not (or for proper values of immutable, your > Mike> choice). They're hashable, except when they're not. Or > Mike> equivalently, they can be used as dictionary keys - or set > Mike> elements - except when they can't. > For those of us not following this thread closely, can you identify cases > where tuples are mutable, not hashable or can't be used as dictionary keys? > I've never encountered any such cases.
Actually, that didn't come from this thread. But it happens if one of the elements in the tuple is mutable. For instance: >>> t = [], >>> type(t) <type 'tuple'> >>> t == [], True >>> hash(t) Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: list objects are unhashable >>> t[0].append(1) >>> t == [], False >>> {t: 23} Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: list objects are unhashable >>> For builtins, the three cases - hashable, immutable and usable as dictionary keys - are all identical. Instances of Python classes with proper __hash__ and __eq__ defintions will be hashable and usable as dictionary keys. Immutable for them is a messy question. <mike -- Mike Meyer <[EMAIL PROTECTED]> http://www.mired.org/home/mwm/ Independent WWW/Perforce/FreeBSD/Unix consultant, email for more information. -- http://mail.python.org/mailman/listinfo/python-list