copy()
создает поверхностную копию объекта. Копируются ссылки на внутренние объекты, а не сами внутренние объекты. Изменение внутренних объектов в копии отразится на оригинале.
deepcopy()
создает глубокую копию объекта. Копируются все внутренние объекты рекурсивно. Изменение внутренних объектов в копии не отразится на оригинале.
deepcopy()
медленнее copy()
, так как требует больше ресурсов.
Разница между copy()
и deepcopy()
в Python заключается в способе копирования объектов, особенно когда эти объекты содержат вложенные объекты (например, списки внутри списков или объекты, содержащие другие объекты).
copy()
(или поверхностное копирование):
Пример:
import copy
original_list = [1, 2, [3, 4]]
shallow_copy = copy.copy(original_list)
shallow_copy[2][0] = 5 # Изменяем вложенный список в shallow_copy
print(original_list) # Вывод: [1, 2, [5, 4]] - original_list тоже изменился!
print(shallow_copy) # Вывод: [1, 2, [5, 4]]
deepcopy()
(или глубокое копирование):
Пример:
import copy
original_list = [1, 2, [3, 4]]
deep_copy = copy.deepcopy(original_list)
deep_copy[2][0] = 5 # Изменяем вложенный список в deep_copy
print(original_list) # Вывод: [1, 2, [3, 4]] - original_list остался без изменений!
print(deep_copy) # Вывод: [1, 2, [5, 4]]
Когда использовать:
copy()
подходит, когда вам нужно создать копию объекта, но вложенные объекты могут быть общими (например, когда изменение вложенных объектов в копии должно отражаться в оригинале или наоборот). Это также более эффективный с точки зрения производительности, чем deepcopy()
.deepcopy()
подходит, когда вам нужна полностью независимая копия объекта и всех его вложенных объектов, чтобы изменения в копии не влияли на оригинал и наоборот. Используйте deepcopy()
, когда у вас есть сложные структуры данных, и вы не хотите нежелательных побочных эффектов при изменении копий.Вкратце: copy()
копирует только верхний уровень объекта, а deepcopy()
копирует все уровни объекта рекурсивно.