`id` Funktion in Python 2.7,` is` Operator, Objektidentität und benutzerdefinierte Methoden [duplizieren]

Diese Frage hat hier bereits eine Antwort:

id () s gebundener und ungebundener Methodenobjekte - manchmal für verschiedene Objekte gleich, manchmal für dasselbe Objekt unterschiedlich 2 Antworten

Die Ergebnisse aus dem folgenden Code in Python 2.7 haben mich als Widerspruch empfunden. Dasis Operator soll mit Objektidentität arbeiten und so istid. Ihre Ergebnisse weichen jedoch voneinander ab, wenn ich eine benutzerdefinierte Methode betrachte. Warum das

py-mach >>class Hello(object):
...  def hello():
...    pass
...
py-mach >>Hello.hello is Hello.hello
False
py-mach >>id(Hello.hello) - id(Hello.hello)
0

Ich habe den folgenden Auszug aus der Beschreibung des @ gefundPython-Datenmodell etwas nützlich. Aber es machte nicht wirklich alles klar. Warum erscheint dasid function liefert die gleiche Ganzzahl, wenn die benutzerdefinierten Methodenobjekte jedes Mal neu erstellt werden?

Benutzerdefinierte Methodenobjekte können beim Abrufen eines Attributs einer Klasse (möglicherweise über eine Instanz dieser Klasse) erstellt werden, wenn dieses Attribut ein benutzerdefiniertes Funktionsobjekt, ein ungebundenes benutzerdefiniertes Methodenobjekt oder ein Klassenmethodenobjekt ist . Wenn das Attribut ein benutzerdefiniertes Methodenobjekt ist, wird ein neues Methodenobjekt nur erstellt, wenn die Klasse, von der es abgerufen wird, mit der im ursprünglichen Methodenobjekt gespeicherten Klasse identisch ist oder von dieser abgeleitet ist. Andernfalls wird das ursprüngliche Methodenobjekt unverändert verwendet.