¿Qué es y qué hace list.copy() en Python?

| Última modificación: 23 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

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.

list.copy() en Python

¿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 semana

Aquí 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étodoModifica la lista originalTipo de copiaLegibilidad
list.copy()NoCopia superficialAlta
list(slicing)NoCopia superficialMedia
copy.deepcopy()NoCopia profundaMedia

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!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a Programar desde Cero

Full Stack Jr. Bootcamp

Apúntate y consigue uno de los perfiles más demandados con Python en solo 4 meses.