Иногда требуется копия, чтобы можно было изменить одну копию, не изменяя другую. В Python есть два способа создания копий:
- Глубокое копирование
- Поверхностное копирование
Чтобы сделать эти копии, мы используем скопировать модуль
. Мы используем модуль copy
для поверхностных и глубоких операций копирования. Например
# import copy module
import
копировать
# инициализировать список 1
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# использовать копию для поверхностного копирования
li2
=
co py.copy ( li1)
# использование Deepcopy для Deepcopy
li3 < /код> <класс кода = "ке yword"> =
copy.deepcopy (li1)
В приведенном выше коде copy()
возвращает поверхностную копию списка, а deepcopy()
возвращает полную копию списка.
deepcopy
Глубокое копирование — это процесс, в котором процесс копирования происходит рекурсивно. Это означает сначала создать новый объект коллекции, а затем рекурсивно заполнить его копиями дочерних объектов, найденных в оригинале. В случае глубокой копии копия объекта копируется в другой объект. Это означает, что любые изменения , внесенные в копию объекта, не отражаются в исходном объекте. В python это делается с помощью функции deepcopy() .
# Код Python для демонстрации операций копирования
# import & quot; копировать " для операций копирования
import
copy
# инициализация списка 1
li1
=
[
1
,
2
, [
3
,
5
],
4
]
# использование Deepcopy для глубокого копирования
li2
=
copy.deepcopy (li1)
# исходные элементы списка
print
(
"Исходные элементы перед глубоким копированием"
)
for
i
in
range
(
0
,
len
(li1)):
print
(li1 [i], end
=
" "
)
print
(
" "
)
# добавить элемент в новый список
li2 [
2
] [
0
]
=
7
# Изменение отражено в l2
print
(
"Новый список элементов после глубокого копирования"
)
для
i
в
диапазон
(
0
,
len
(li1)):
print
(li2 [i], end
=
""
)
p rint
(
""
)
# Изменение НЕ отражается в исходном списке
# как глубокая копия
print
(
"Исходные элементы после глубокого копирования"
)
for
i
in
диапазон
(
0
,
len
(li1)):
print
(li1 [i], end
=
""
)
Выход:
Исходный элемент s до глубокого копирования 1 2 [3, 5] 4 Новый список элементов после глубокого копирования 1 2 [7, 5] 4 Исходные элементы после глубокого копирования 1 2 [3, 5] 4
In В приведенном выше примере изменение, внесенное в список, не повлияло на другие списки, что указывает на глубокое копирование списка.
Поверхностное копирование
Поверхностное копирование означает создание нового объекта коллекции и последующее заполнение его ссылками на найденные дочерние объекты. в оригинале. Процесс копирования не повторяется и поэтому не создает копии самих дочерних объектов. В случае поверхностной копии ссылка на объект копируется в другой объект. Это означает, что любые изменения , внесенные в копию объекта, отражаются в исходном объекте. Python делает это с помощью функции "copy () ".
|
Выход:
Исходные элементы перед поверхностным копированием 1 2 [3, 5] 4 Исходные элементы после поверхностного копирования 1 2 [7, 5] 4
В приведенном выше примере изменение, внесенное в список, вступил в силу для другого списка, указывая на то, что этот список был скопирован.
Важные моменты:
Разница между мелкими и глубокими копиями применима только к составным объектам (объектам, содержащим другие объекты, такие как списки или экземпляры классов):
- Поверхностная копия создает новый составной объект, а затем (насколько это возможно) вставляет ссылки на объекты, найденные в оригинале.
- Глубокая копия создает новый составной объект, а затем рекурсивно вставляет в него копии объектов, найденных в оригинале.