For a 'mutable key' to make sense, the following:
lst = [] dct = {l: "Hi!"} print dct[[]] print dct[lst] lst.append(1) print dct[[1]] print dct[lst]
Should print: Hi Hi Hi Hi
And here's an implementation that does so:
py> class sillydict(dict):
... def __getitem__(self, key):
... items = self.items()
... self.clear()
... self.update(items)
... return super(sillydict, self).__getitem__(key)
...
py> class sillylist(list):
... def __hash__(self):
... return hash(tuple(self))
...
py> lst = sillylist([])
py> dct = sillydict({lst: "Hi!"})
py> print dct[sillylist([])]
Hi!
py> print dct[lst]
Hi!
py> lst.append(1)
py> print dct[sillylist([1])]
Hi!
py> print dct[lst]
Hi!Of course, as noted by the classes themselves, they're silly. ;) But as long as you don't mind rehashing the dict each time the dict is accessed ;) you can get sane behavior even in the presence of mutable keys.
Steve -- http://mail.python.org/mailman/listinfo/python-list
