Код Middle Типы, изменяемость и сравнение обновлено

Своя глубокая копия вложенных структур

Условие

Напишите deep_copy(obj), который копирует вложенные list и dict (в значениях могут быть числа, строки, None, bool, списки и словари) без copy.deepcopy. Результат должен быть равен исходному, но не делить с ним ни одного списка или словаря.

В проверке функция вызывается, затем у оригинала меняются вложенные объекты; возвращается пара [копия, копия_после_изменения_оригинала_равна_старой]. Вам нужно реализовать только deep_copy, обёртку check менять не нужно.

Примеры

check([1, [2, 3]]) // [[1, [2, 3]], true]
check({"a":{"b":[1,2]}}) // [{"a":{"b":[1,2]}}, true]
check([]) // [[], true]

Как подойти

Подсказки: 2
  1. Неизменяемые значения можно возвращать как есть.
  2. Для списка и словаря вызовите deep_copy рекурсивно для каждого значения.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме