Моя запись для симуляции copy.deepcopy
:
def deepcopy(obj):
if isinstance(obj, dict):
return {deepcopy(key): deepcopy(value) for key, value in obj.items()}
if hasattr(obj, '__iter__'):
return type(obj)(deepcopy(item) for item in obj)
return obj
Стратегия: перебирать каждый элемент переданного объекта, рекурсивно опускаясь до элементов, которые также являются итерируемыми, и создавая новые объекты того же типа.
Я не утверждаю, что это всеобъемлющее или безошибочное [1] (не передавайте объект, который ссылается на себя!), Но должно помочь вам начать.
[1] Действительно! Суть в том, чтобы продемонстрировать, а не охватить все возможные варианты. Источник copy.deepcopy
имеет длину 50 строк, а это не обрабатывает все.