Set "in" - operator: Verwendungen der Gleichheit oder Identität?

class A(object):
    def __cmp__(self):
        print '__cmp__'
        return object.__cmp__(self)

    def __eq__(self, rhs):
        print '__eq__'
        return True
a1 = A()
a2 = A()
print a1 in set([a1])
print a1 in set([a2])

Warum erste Zeile druckt Wahr, aber die zweite druckt Falsch? Und weder eingibt Betreiber eq?

Ich bin mit Python 2.6

  • Setzt wahrscheinlich verwenden Sie hash-codes vor der Gleichheit. Versuchen Sie, die Umsetzung __hash__.
  • haben Sie versucht, diesen code ausführen mit der __cmp__ Funktion auskommentiert?
  • x.__contains__(y) <==> y in x
  • nur um sicherzustellen, dass Sie wissen... der Satz ist nicht erforderlich für den in-operator zu arbeiten. Wenn Sie brauchen nur einen einfachen test a1 [a1] ist in Ordnung.
  • Interessant... wenn Sie dann entfernen Sie den set, erst der zweite (a1 [a2]) ruft Equalizer. Ich denke, dass der in-operator prüft Identität zunächst als Optimierung?
Schreibe einen Kommentar