Como o Python distingue a função de retorno de chamada que é um membro de uma classe?

Por favor, olhe o exemplo simples:

<code>class A:
  def __init__(self, flag):
    self.flag = flag

  def func(self):
    print self.flag

a = A(1)
b = A(2)
callback_a = a.func
callback_b = b.func

callback_a()
callback_b()
</code>

O resultado é:

<code>1
2
</code>

Ele é executado como esperado. Mas eu tenho uma pergunta. Em C, a função de retorno de chamada é passada como um ponteiro. No Python, ele deve ter uma maneira semelhante de fazer isso, portanto, o chamador sabe o endereço da função. Mas no meu exemplo, não apenas o ponteiro de função é passado, mas também o parâmetro (self) é passado, porque o mesmo método da mesma classe imprime resultados diferentes. Então minhas perguntas são:

Esse método no Python tem apenas uma cópia na memória? Meu significado é que o código de qualquer método tem apenas uma cópia e, no meu exemplo, o método não será clonado em si. Acho que deveria ter apenas uma cópia, mas aqui ainda faço essa pergunta para conseguir mais entradas.

Eu lembro que tudo no Python é um objeto. Então, no meu exemplo, existem duas instâncias de função com parâmetros diferentes, mas apenas uma cópia do código?

questionAnswers(2)

yourAnswerToTheQuestion