Почему две функции с тем же значением id
имеют разные атрибуты, такие как __doc__
или __name__
?
Вот пример игрушки:
some_dict = {}
for i in range(2):
def fun(self, *args):
print i
fun.__doc__ = "I am function {}".format(i)
fun.__name__ = "function_{}".format(i)
some_dict["function_{}".format(i)] = fun
my_type = type("my_type", (object,), some_dict)
m = my_type()
print id(m.function_0)
print id(m.function_1)
print m.function_0.__doc__
print m.function_1.__doc__
print m.function_0.__name__
print m.function_1.__name__
print m.function_0()
print m.function_1()
Какие принты:
57386560
57386560
I am function 0
I am function 1
function_0
function_1
1 # <--- Why is it bound to the most recent value of that variable?
1
Я пробовал смешивать при вызове copy.deepcopy
(не уверен, нужна ли рекурсивная копия для функций или это слишком много), но это ничего не меняет.