Copia de array en Python

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *