Wie wir ja alle Wissen, darf man für ein dict() aus nachvollziehbaren Gründen nur immutable Objekte verwenden (tuples, strings oder numerische Werte z.B.)
Durch Zufall habe ich jetzt aber rausgefunden, dass ich sehr wohl Klasseninstanzen als keys hineinstecken kann (Python 2.3.5) und nach einem ersten Versuch auch alles wunderbar funktioniert!
Was ist davon zu halten? Ich würde mal raten, dass der Hash aus der RAM-Adresse des Objekts berechnet wird, meint ihr, ich darf mich darauf verlassen und das so verwenden?
Hier ein bisschen Code mit Ausgabe:
Code: Alles auswählen
class Mutable:
def __init__(self, start=42):
self.mutator = start
def mutate(self):
self.mutator += 1
a = Mutable(-56)
b = Mutable(12)
d = {a: "This is a", b: "This is b"}
print d
a.mutate()
d[Mutable(88)] = "This is c"
b.mutate()
print d
a.something = 46
b.something_else = 1237
print d
# Borg a and b together, now they even share state!
b.__dict__ = a.__dict__
print d
del b
print d
Code: Alles auswählen
{<__main__.Mutable instance at 0xb7ded7cc>: 'This is b', <__main__.Mutable instance at 0xb7ded82c>: 'This is a'}
{<__main__.Mutable instance at 0xb7ded7cc>: 'This is b', <__main__.Mutable instance at 0xb7ded82c>: 'This is a', <__main__.Mutable instance at 0xb7ded8ec>: 'This is c'}
{<__main__.Mutable instance at 0xb7ded7cc>: 'This is b', <__main__.Mutable instance at 0xb7ded82c>: 'This is a', <__main__.Mutable instance at 0xb7ded8ec>: 'This is c'}
{<__main__.Mutable instance at 0xb7ded7cc>: 'This is b', <__main__.Mutable instance at 0xb7ded82c>: 'This is a', <__main__.Mutable instance at 0xb7ded8ec>: 'This is c'}
{<__main__.Mutable instance at 0xb7ded7cc>: 'This is b', <__main__.Mutable instance at 0xb7ded82c>: 'This is a', <__main__.Mutable instance at 0xb7ded8ec>: 'This is c'}
This is a