Назад к вопросам
Middle+
74
questionbank
Как реализовать функции copy и deepcopy в Python?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Реализация copy и deepcopy основана на модуле copy.
Для copy:
Создает поверхностную копию объекта. Для составных объектов (списки, словари и т.д.) создает новый контейнер, но элементы внутри него являются ссылками на оригинальные объекты.
import copy
# Исходный список
original_list = [[1, 2], [3, 4]]
# Поверхностное копирование
copied_list = copy.copy(original_list)
# Изменение элемента во вложенном списке оригинала
original_list[0][0] = 99
# copied_list[0][0] также изменится, так как оба списка ссылаются на тот же вложенный список
Для deepcopy:
Создает глубокую копию объекта. Создает новые контейнеры и рекурсивно копирует все элементы внутри составных объектов.
import copy
# Исходный словарь
original_dict = {'a': [1, 2], 'b': {'c': 3}}
# Глубокое копирование
deep_copied_dict = copy.deepcopy(original_dict)
# Изменение элемента во вложенном списке оригинала
original_dict['a'][0] = 99
# deep_copied_dict['a'][0] останется прежним
Ключевые отличия:
| Характеристика | copy.copy() |
copy.deepcopy() |
|---|---|---|
| Вложенные объекты | СоBершает поверхностное копирование, ссылки на оригиналы. | СоBершает рекурсивное копирование. |
| Эффективность | Быстрее для больших структур. | Медленнее для больших структур. |
| Потребление памяти | Меньше. | Больше. |
| Изменение оригинала | Может влиять на скопированный объект. | Не влияет на скопированный объект. |