Trabajando con listas en Python me he encontrado con situaciones en las que es necesario duplicar una lista para realizar modificaciones sin afectar la original. Esto puede suceder por muchas razones, pero lo bueno es que Python nos ofrece el método list.copy() y en este artículo te quiero mostrar qué es y cómo es su funcionamiento.
¿Qué es list.copy()?
El método list.copy() está incluido en el lenguaje Python y sirve para crear una copia superficial o shallow copy, de una lista. Es decir, se genera una nueva lista que contiene los mismos elementos de la lista original, pero con su propia identidad en la memoria. De este modo, los cambios que se hagan en una lista no afectarán la original, solamente en casos específicos con datos anidados.
La sintaxis de list.copy() maneja la siguiente estructura:
list.copy()
Este método:
- No requiere ninguno.
- Retorna una nueva lista que es una copia de la original.
¿Cómo funciona list.copy()?: contextos
Algunos contextos en los que puede funcionar list.copy son:
- Crear una copia básica de una lista:
frutas = ['manzana', 'banana', 'cereza', 'naranja']
copia_frutas = frutas.copy()
print('Original:', frutas) # Salida: ['manzana', 'banana', 'cereza', 'naranja']
print('Copia:', copia_frutas) # Salida: ['manzana', 'banana', 'cereza', 'naranja']
Para el ejemplo de esta ocasión, list.copy() genera una nueva lista llamada copia_frutas con los mismos elementos que frutas. Ambas listas son independientes entre sí.
- Modificar la lista copiada:
numeros = [1, 2, 3]
copia_numeros = numeros.copy()
copia_numeros.append(4)
print('Original:', numeros) # Salida: [1, 2, 3]
print('Copia:', copia_numeros) # Salida: [1, 2, 3, 4]
🔴 ¿Quieres Aprender a Programar con Python? 🔴
Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semanaAquí podemos observar que al agregar un nuevo elemento a la copia, la lista original permanece intacta.
Aplicaciones de list.copy()
- Preservar datos originales al modificar una copia: si trabajas con datos que no es posible modificar directamente, list.copy() te ayuda a crear una copia independiente:
usuarios = ['Alice', 'Bob', 'Charlie']
usuarios_copia = usuarios.copy()
usuarios_copia.append('Diana')
print('Original:', usuarios) # Salida: ['Alice', 'Bob', 'Charlie']
print('Copia:', usuarios_copia) # Salida: ['Alice', 'Bob', 'Charlie', 'Diana']
- Manipulación de datos en pruebas o simulaciones: este método también es muy común en proyectos que requieran pruebas o simulaciones, ya que se puede trabajar con versiones independientes de una lista.
Casos especiales: listas anidadas y copias superficiales
Si bien list.copy() es muy bueno para trabajar con listas simples, para el caso de listas anidadas (listas dentro de otras listas), su comportamiento es diferente. ESto sucede porque se realiza una copia superficial, por lo que las preferencias a los elementos internos se comparten entre las listas. Veamos un ejemplo:
anidada = [[1, 2], [3, 4]]
copia_anidada = anidada.copy()
copia_anidada[0][0] = 100
print('Original:', anidada) # Salida: [[100, 2], [3, 4]]
print('Copia:', copia_anidada) # Salida: [[100, 2], [3, 4]]
Aquí en este ejemplo, cambiar el valor de un elemento dentro de la lista copiada afecta también a la lista original, ya que ambas comparten las mismas referencias a los objetos internos.
- Solución: usar copias profundas (deep copies): si requieres la copia de listas anidadas sin tener que compartir referencias, puedes usar el módulo copy para crear una copia profunda o deep copy. Así:
import copy
anidada = [[1, 2], [3, 4]]
copia_profunda = copy.deepcopy(anidada)
copia_profunda[0][0] = 100
print('Original:', anidada) # Salida: [[1, 2], [3, 4]]
print('Copia:', copia_profunda) # Salida: [[100, 2], [3, 4]]
¿Qué diferencia hay entre list.copy() y otras formas de copiar listas?
Además de list.copy(), hay otras maneras de copiar listas en Python, pero list.copy() es más directa y legible. Veamos una comparativa entre los métodos más comunes:
Método | Modifica la lista original | Tipo de copia | Legibilidad |
---|---|---|---|
list.copy() | No | Copia superficial | Alta |
list(slicing) | No | Copia superficial | Media |
copy.deepcopy() | No | Copia profunda | Media |
Veamos un ejemplo con slicing:
numeros = [1, 2, 3]
copia = numeros[:]
copia.append(4)
print('Original:', numeros) # Salida: [1, 2, 3]
print('Copia:', copia) # Salida: [1, 2, 3, 4]
Aunque slicing también crea una copia superficial, list.copy() es más explícito y adecuado para la mayoría de los casos.
Ahora que sabes cómo funciona este método y quieres seguir aprendiendo, da un paso adelante y descubre con nosotros todo lo que podrás conocer si te unes al bootcamp en programación desde cero, en dodne te prepararemos para ingresar al mundo laboral en poco tiempo. ¡Date la oportunidad de cambiar tu vida desde ahora!