Как сделать копию функции, что бы у копии был отличный от оригинала ID (deepcopy не работает)
Есть простая функция
def foo(n): return n
необходимо сделать копию данной функции, чтобы id были разные. Если делать при помощи deepcopy, то копия ссылается на оригинал.
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Интересный вопрос, нашел такое решение.
>>> def foo(n): return n
>>> id(foo)
123294917623008
>>> import copy, types
>>> a=types.FunctionType(copy.copy(foo.__code__), globals())
>>> id(a)
123294919822208
>>> a(123)
123
globals() - контекст функции, можно поставить туда: locals() , пустой словарь {} или сформировать свой контекст вручную, старый foo.__globals__ или его копию