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