Este post trata sobre el lenguaje de programación Python. Vamos a ver cómo copiar un arreglo pero eliminando la referencia; de este modo al modificar el arreglo A no vamos a modificar sin querer al arreglo B.
Esto también es conocido como clonar un arreglo o clonar una lista en Python.
Nota: con lista también me refiero a arreglo, array, vector, como lo conozcas.
Arreglo de una dimensión
Para una lista de una dimensión lo único que tenemos que hacer es usar operaciones de listas por ejemplo:
lista = lista_original[:]
Veamos un ejemplo en donde se demuestra que al modificar una lista no se está modificando a la otra:
lista = [1, 2, 3]
otra_lista = lista[:]
print("lista:")
print(lista)
print("otra_lista:")
print(otra_lista)
# Modificar a lista
print("Modificando...")
otra_lista[0] = 4
# Y al imprimir, no debería haber modificado a "lista"
print("lista:")
print(lista)
print("otra_lista:")
print(otra_lista)
Lista de dos dimensiones
Para copiar una lista que tiene dos dimensiones (por ejemplo una matriz) podemos usar a la función deepcopy
(copia en profundidad) presente dentro de copy
.
Primero la importamos.
from copy import deepcopy
Después obtenemos una copia del arreglo con:
copia = deepcopy(original)
Algo así:
from copy import deepcopy
lista = [
[1, 2],
[3, 4],
]
otra_lista = deepcopy(lista)
print("lista:")
print(lista)
print("otra_lista:")
print(otra_lista)
# Modificar a lista
print("Modificando...")
otra_lista[0][0] = 4
# Y al imprimir, no debería haber modificado a "lista"
print("lista:")
print(lista)
print("otra_lista:")
print(otra_lista)
De este modo la copia se realiza en profundidad y elimina las referencias, de modo que al modificar una lista o pasarla a una función, si se modifica dentro de la misma, no surtirá efecto en la original.
Conclusión
Como puedes ver estas técnicas van a evitar que al modificar un arreglo copia, modifiques sin querer al original. Esto sirve para cuando queremos crear una copia de la lista sin modificar la original; por ejemplo al pasarla como argumento en una función.