Как сделать копию функции, что бы у копии был отличный от оригинала 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__ или его копию

→ Ссылка