Рубрики
Без рубрики

Python Copy – Глубокая копия

Python Copy, Python Deep Copy, Python Moadow Copy, Python Список копирования, массив копирования Python, функция копирования Python, Python Copy Операция Пример Код.

Автор оригинала: Pankaj Kumar.

Сегодня мы узнаем о классе копирования Python. Мы также узнаем о мелкой копии, глубокой копии и почему нам нужны эти разные операции копирования.

Копирование Python

Библиотека Python предоставляет нам класс копирования с двумя операциями – Копировать (х) и Deepcopy (x) – для мелкой копии и глубокой копии соответственно. Но почему мы им нужны? Почему простое назначение одного объекта к другому с использованием оператора равна достаточно хорош?

Причина в том, что, когда мы используем равноправные оператора Python для создания нового объекта, он фактически создает ссылку на тот же объект в памяти. Поскольку оба переменных относятся к тому же объекту, любые изменения в одном тоже будут отражены в другом. В большинстве случаев мы не хотим, поэтому необходимость отдельной операции копирования. Давайте докажем нашу теорию о операторе присваивания через простой пример.

old_list = [1, 2, 3, 4]

new_list = old_list

new_list.append(5)

print("new_list items : ", new_list)
print("old_list items : ", old_list)

Выход выше программы Python:

new_list items :  [1, 2, 3, 4, 5]
old_list items :  [1, 2, 3, 4, 5]

Обратите внимание, что мы не изменили Old_List, но поскольку оба списка указывали на тот же объект, любые изменения в одном из них были отражены в другом.

Также, если у нас есть неизменный объект, то оператор назначения достаточно хорош, поскольку значение объекта не изменится.

Неглубокая копия

Когда мы используем функцию Python Moallow Copy Копировать () На самом деле он создает новый объект, а затем вставьте ссылки на объекты, найденные в исходном объекте. Так что неглубокая копия достаточно хороша в приведенном выше случае, где у нас есть Список целых чисел, потому что элементы списка неизменяются. Но это недостаточно хорош, когда у нас есть список списка. Позже мы рассмотрим глубокую копию, давайте сначаем посмотрим на пример копирования Python Moallow.

import copy

old_list = [1, 2, 3, 4]

# python copy - shallow copy
new_list = copy.copy(old_list)

new_list.append(5)

print("new_list items : ", new_list)
print("old_list items : ", old_list)

Как вы можете видеть в вышеуказанном выходе, что изменение new_list не пострадал от Old_List Поскольку мы используем функцию копирования для копирования списка.

Теперь давайте посмотрим пример, где операция неглубокого копирования не удастся, потому что она не копирует элементы в исходном объекте рекурсивно.

import copy

old_list = [[1, 2], [3, 4]]

new_list = copy.copy(old_list)

new_list[0].append(10)

print("new_list items : ", new_list)
print("old_list items : ", old_list)

Выход приведен выше пример копирования Python:

new_list items :  [[1, 2, 10], [3, 4]]
old_list items :  [[1, 2, 10], [3, 4]]

Выход ясно предлагает, чтобы нам нужна отдельная операция для глубокой копии объектов.

Python Deep Copy

Мы всегда должны использовать Deepcopy (x) Функция с объектами, такими как список списков, так что объекты копируются рекурсивно. Изменим вышеприведенный пример неглубокого копирования и используйте функцию глубокой копии и проверьте выходные данные. Я также добавил еще несколько добавок и удалять операции в программу.

import copy

list_of_list = [[1, 2], [3, 4], ["A", "B"]]

# python deep copy
new_list_of_list = copy.deepcopy(list_of_list)

new_list_of_list[0].append(10)
new_list_of_list[1].remove(3)

list_of_list[2].append("C")

print("list_of_list items : ", list_of_list)
print("new_list_of_list items : ", new_list_of_list)

Ниже приведены изображение показывает вывод операции Python Deep Copy.

Обратите внимание, что этот метод медленнее, чем мелкое копирование по очевидным причинам, поэтому используйте его только тогда, когда это действительно требуется. Также глубокая копия займет больше памяти, если объекты внутри также скопированы, поэтому используйте его с умом и только если по-настоящему требуется.

Это все о копии Python Copy и Python Deep Copy.

Ссылка: Официальная документация