Issue 36163: same object, same method, but the is keyword return false. (original) (raw)
The is
operator returns False because the two objects are different objects.
Methods are descriptors, and whenever you access an instance method, you get a brand-new method object. This is described in the documentation for descriptors:
https://docs.python.org/3/howto/descriptor.html#functions-and-methods
The last two tests in your example both call id(a.a), which returns the same ID number for precisely the same reason as we explained in your previous bug report #36156. Since the two "a.a" method objects don't exist at the same time, the interpreter is permitted to re-use the same ID number for them.
P.S. remember in the previous bug report you raised, I asked you to use less awkward and confusing names? "a.a" is a terrible name, even for a simple example like this. It makes it hard to talk about what is going on when "a" is an instance and also a method.