Дублирование объектов в Python: подробное руководство
Создание копий объектов — фундаментальная задача программирования на Python, особенно при работе со сложными данными структуры. В этой статье рассматриваются тонкости копирования объектов в Python, уделяя особое внимание созданию независимых объектов, на которые не влияют изменения, внесенные в оригинал.
Поверхностное и глубокое копирование
В Python существует два основных метода копирования объектов: поверхностное копирование и глубокое копирование. При поверхностном копировании создается новый объект, который ссылается на те же неизменяемые поля (например, целые числа, строки), что и исходный, но создает новые копии изменяемых полей (например, списки, словари).
Например, рассмотрим следующее фрагмент кода:
original_list = [1, 2, 3]
new_list = original_list[:] # Shallow copy
Хотя new_list и original_list кажутся отдельными объектами, любые изменения, внесенные в один список, будут отражены в другом, поскольку они оба ссылаются на одни и те же базовые данные.
Создание полностью независимых объектов
Чтобы создать действительно независимые объекты, мы должны прибегнуть к глубокому копированию. Это предполагает создание новой копии каждого поля, включая вложенные изменяемые структуры. Функция Python copy.deepcopy() обеспечивает эту функциональность.
Давайте изменим наш предыдущий пример:
import copy
original_list = [1, 2, [4, 5]]
new_list = copy.deepcopy(original_list)
Теперь, если мы внесем изменение в new_list, это не повлияет на original_list:
new_list[2].append(6)
print(original_list) # Output: [1, 2, [4, 5]]
print(new_list) # Output: [1, 2, [4, 5, 6]]
Заключение
Используя функцию copy.deepcopy(), программисты может создавать полностью независимые копии объектов, гарантируя, что изменения, внесенные в один, не повлияют на другой. Понимание разницы между поверхностным и глубоким копированием имеет решающее значение для эффективного манипулирования объектами в Python.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3