Чтобы скопировать массив в Python, вы можете использовать оператор присваивания(=). Оператор присваивания не копирует объекты. Вместо этого он создает привязки между целью и объектом. Когда мы используем оператор =, мы думаем, что он создает новый объект, но это не так. Вместо этого он создает новую переменную, которая использует ссылку на исходный объект.
Пример
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # Printing the id of the array print(id(arr)) # Using assignment operator to copy array arr2 = arr # Printing the id of the copied array print(id(arr2)) # Changing the original array arr[2] = 11 # Printing both arrays print(arr) print(arr2) |
Выход
|
1 2 3 4 |
4365624976 4365624976 [ 1 2 11 4 5] [ 1 2 11 4 5] |
Поверхностная копия в Python
Неглубокая копия — это побитовая копия объекта. Это означает, что когда новый объект создается на основе исходного объекта, он имеет точную копию значений исходного объекта. Ссылочные адреса копируются, если какое-либо из значений объекта ссылается на другие объекты.
Процесс копирования не создает копии самих дочерних объектов. Но в случае поверхностной копии объекта ссылка на объект копируется в другой объект. Это означает, что любые изменения, внесенные в копию объекта, отражаются в исходном объекте.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # Printing the id of the array print(id(arr)) # Shallow copy to copy array arr2 = arr.view() # Printing the id of the copied array print(id(arr2)) # Changing the original array arr[2] = 11 # Printing both arrays print(arr) print(arr2) |
Выход
|
1 2 3 4 |
4378519184 4378519280 [ 1 2 11 4 5] [ 1 2 11 4 5] |
Глубокое копирование на Python
Глубокое копирование — это процесс, в котором процесс копирования происходит рекурсивно. Это означает сначала создание нового объекта, а затем рекурсивное заполнение его копиями дочерних объектов, найденных в оригинале. В случае глубокого копирования копия объекта копируется в другие объекты.
Поэтому, когда вы копируете объект, изменение значения скопированного массива не отражает исходный массив.
Чтобы создать глубокую копию массива в Python, используйте метод array.copy(). Метод array.copy() не принимает никаких аргументов, поскольку он вызывается для исходного массива и возвращает глубоко скопированный массив.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import numpy as np arr = np.array([1, 2, 3, 4, 5]) # Printing the id of the array print(id(arr)) # Deep copy using copy() method arr2 = arr.copy() # Printing the id of the copied array print(id(arr2)) # Changing the original array arr[2] = 11 # Printing both arrays print(arr) print(arr2) |
Выход
|
1 2 3 4 |
4301858448 4301858544 [ 1 2 11 4 5] [1 2 3 4 5] |
