Veamos cómo copiar arreglos en Python. Hay 3 formas de copiar arrays:
- Simplemente usando el operador de asignación.
- Copia superficial
- Copia profunda
Asignación de la array
Podemos crear una copia de una array usando el operador de asignación (=).
Sintaxis:
new_arr = old_ arr
En Python, las declaraciones de asignación no copian objetos, crean enlaces entre un objetivo y un objeto. Cuando usamos el operador =, el usuario piensa que esto crea un nuevo objeto; bueno, no lo hace. Solo crea una nueva variable que comparte la referencia del objeto original.
Ejemplo:
Python3
# importing the module from numpy import * # creating the first array arr1 = array([2, 6, 9, 4]) # displaying the identity of arr1 print(id(arr1)) # assigning arr1 to arr2 arr2 = arr1 # displaying the identity of arr2 print(id(arr2)) # making a change in arr1 arr1[1] = 7 # displaying the arrays print(arr1) print(arr2)
Producción :
117854800 117854800 [2 7 9 4] [2 7 9 4]
Podemos ver que ambas arrays hacen referencia al mismo objeto.
Copia superficial
Una copia superficial significa construir un nuevo objeto de colección y luego llenarlo con referencias a los objetos secundarios que se encuentran en el original. El proceso de copia no se repite y, por lo tanto, no creará copias de los propios objetos secundarios. En el caso de copia superficial, se copia una referencia del objeto en otro objeto. Significa que cualquier cambio realizado en una copia del objeto se refleja en el objeto original. Implementaremos una copia superficial usando la función view() .
Ejemplo :
Python3
# importing the module from numpy import * # creating the first array arr1 = array([2, 6, 9, 4]) # displaying the identity of arr1 print(id(arr1)) # shallow copy arr1 in arr2 using view() arr2 = arr1.view() # displaying the identity of arr2 print(id(arr2)) # making a change in arr1 arr1[1] = 7 # displaying the arrays print(arr1) print(arr2)
Esta vez, aunque las 2 arrays hacen referencia a diferentes objetos, al cambiar el valor de uno, el valor de otro también cambia.
Copia profunda
La copia profunda es un proceso en el que el proceso de copia se produce de forma recursiva. Significa primero construir un nuevo objeto de colección y luego poblarlo recursivamente con copias de los objetos secundarios que se encuentran en el original. En el caso de la copia profunda, una copia del objeto se copia en otro objeto. Significa que los cambios realizados en una copia del objeto no se reflejan en el objeto original. Implementaremos una copia profunda usando la función copy() .
Python3
# importing the module from numpy import * # creating the first array arr1 = array([2, 6, 9, 4]) # displaying the identity of arr1 print(id(arr1)) # shallow copy arr1 in arr2 using view() arr2 = arr1.copy() # displaying the identity of arr2 print(id(arr2)) # making a change in arr1 arr1[1] = 7 # displaying the arrays print(arr1) print(arr2)
Producción :
121258976 125714048 [2 7 9 4] [2 6 9 4]
Esta vez, los cambios realizados en una array no se reflejan en la otra array.
Copia Profunda Continuación
Si está tratando con arrays NumPy, entonces numpy.copy() le dará una copia profunda. Sin embargo, si su array es simplemente una lista de listas, considere los siguientes dos enfoques en la tarea de rotar una imagen (representada como una lista de una lista) 90 grados:
Python3
import copy def rotate_matrix(image): # Copy method one copy_image_one = copy.deepcopy(image) print("Original", matrix) print("Copy of original", copy_image_one) N = len(matrix) # Part 1, reverse order within each row for row in range(N): for column in range(N): copy_image_one[row][column] = image[row][N-column-1] print("After modification") print("Original", matrix) print("Copy", copy_image_one) # Copy method two copy_image_two = [list(row) for row in copy_image_one] # Test on what happens when you remove list from the above code. # Part 2, transpose for row in range(N): for column in range(N): copy_image_two[column][row] = copy_image_one[row][column] return copy_image_two if __name__ == "__main__": matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print("Rotated image", rotate_matrix(matrix))
Producción:
Original [[1, 2, 3], [4, 5, 6], [7, 8, 9]] Copy of original [[1, 2, 3], [4, 5, 6], [7, 8, 9]] After modification Original [[1, 2, 3], [4, 5, 6], [7, 8, 9]] Copy [[3, 2, 1], [6, 5, 4], [9, 8, 7]] Rotated image [[3, 6, 9], [2, 5, 8], [1, 4, 7]]
Publicación traducida automáticamente
Artículo escrito por jmpatel332000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA