Saltar al contenido principal

Python Copy List: Lo que debes saber

Comprende cómo copiar listas en Python. Aprende a utilizar las funciones copy() y list(). Descubre la diferencia entre copias superficiales y profundas.
Actualizado 13 ago 2024  · 7 min de lectura

Las listas de Python son potentes estructuras de datos que se utilizan para almacenar una colección de elementos. El método copiar lista es importante cuando se manejan datos, ya que ayuda a conservar la lista original mientras se realizan operaciones en la duplicada. En este tutorial, explicaré las técnicas básicas y avanzadas de copia de listas con ejemplos prácticos.

Antes de explorar los distintos ejemplos, te recomiendo que sigas el curso Introducción a Python de DataCamp para aprender los fundamentos de Python, incluidas las distintas estructuras de datos de Python. La Hoja de Trucos de Python para Principiantes también te será útil para referenciar diferentes funciones y métodos.

Python utilizando una fotocopiadora

"Pitón usando una fotocopiadora". Imagen de Dall-E.

Respuesta rápida: Cómo copiar una lista en Python

El siguiente ejemplo muestra cómo copiar una lista en Python utilizando el método copy(). Observa cómo la lista original permanece inalterada aunque se realicen cambios en la lista duplicada. El código imprimirá [1, 2, 3].

# Define the original list
original_list = [1, 2, 3]

# Create a shallow copy of the original list
copied_list = original_list.copy()

# Modify the first element of the copied list
copied_list[0] = 99

print(original_list)
[1, 2, 3]

Más técnicas para copiar una lista en Python

Antes de ver las distintas técnicas para copiar una lista en Python, veamos por qué no utilizamos el operador de asignación =. No utilizamos = porque al hacerlo no crearíamos realmente una copia de nuestra lista. El operador de asignación sólo crearía una referencia a nuestra lista. 

En el siguiente ejemplo, original_list y reference_to_original_list se refieren a la misma lista después de nuestra asignación.

# Create a list called original_list
original_list = [1, 2, 3]

# Create a new reference copied_list that points to the same list as original_list
reference_to_original_list = original_list

Aquí, cualquier modificación en la lista duplicada afectará a la lista original y viceversa. Estos cambios se producen porque las dos listas están almacenadas en la misma memoria. Ahora, veamos las distintas formas de copiar realmente nuestra lista. 

Utilizar el método copy()

El método copy() es un método incorporado que sirve para crear una copia superficial de la lista. El método copy() está disponible a partir de Python 3.3. Este método sólo copia la estructura de lista de nivel superior. La sintaxis del método copy() se muestra a continuación.

new_list = original_list.copy()

En el siguiente ejemplo, el código imprimirá [1, 2, 3, 4].

# Original list with nested structure
original_list = [1, 2, 3, 4]

# Create a shallow copy using the copy() method
shallow_copied_list = original_list.copy()

print(shallow_copied_list)
[1, 2, 3, 4]

Utilizar el constructor list()

El constructor list() se utiliza para crear una nueva lista a partir de una lista existente, de forma que incluya todos los elementos de la lista original. Esta técnica es importante cuando se crea un nuevo objeto lista en el que los cambios en la lista copiada no afectarán a la lista original. El siguiente código imprime [1, 2, 3].

# Create a list called original_list
original_list = [1, 2, 3]

# Create a shallow copy of original_list using the list() function
copied_list = list(original_list)

# Modify the first element of copied_list
copied_list[0] = 99

print(original_list)
[1, 2, 3]

Utilizar el troceado de listas con [:]

El troceado de listas [:] proporciona un método conciso de crear una copia superficial de una lista. El método de troceado de listas [:] es eficaz porque se implementa a bajo nivel en Python. A continuación se muestra la sintaxis de este método. 

new_list = original_list[:]

El siguiente código imprime [1, 2, 3].

# Create a list called original_list
original_list = [1, 2, 3]

# Create a shallow copy of original_list using list slicing
copied_list = original_list[:]

# Modify the first element of copied_list
copied_list[0] = 99

print(original_list)
[1, 2, 3]

En este contexto, utilizamos el método de troceado de listas para incluir todo lo que hay en la lista, pero en otros contextos, el troceado puede utilizarse para crear sublistas especificando los índices de inicio y fin.

Copia superficial en Python vs. Copia profunda

Comprender la diferencia entre copia superficial y profunda es importante para evitar la transformación involuntaria de los datos. 

  • Una copia superficial sólo copia los elementos del nivel superior de la lista y no afecta a las listas anidadas ni a los objetos mutables de la lista que hagan referencia a los mismos objetos. Los cambios realizados en los objetos mutables afectarán tanto a la lista original como a la copiada.
  • La copia profunda copia recursivamente todos los elementos, incluidas las listas anidadas y los objetos mutables, creando copias independientes. Los cambios realizados en los objetos anidados en la lista copiada no afectarán a la lista original.

Te recomiendo que utilices la función copy.copy() para la copia superficial y la función copy.deepcopy() para la copia profunda. 

Método

Copia superficial

Copia profunda

copy()

constructor list()

Rebanar lista [:]

copy.copy()

copy.deepcopy()

Cómo copiar una lista anidada en Python

Cuando se manejan listas anidadas o estructuras de datos complejas, se necesitan métodos de copia de listas más sofisticados. Veamos las distintas técnicas para tratar las listas anidadas.

Utilizando copia.copia()

El módulo copy proporciona la función copy(), que crea una copia superficial de una lista. La función copy() es más explícita que utilizar el constructor list() o el troceado de listas [:]. Puedes utilizar este método cuando quieras hacer hincapié en crear una copia superficial de una lista para mejorar la legibilidad.

El siguiente ejemplo muestra cómo copiar superficialmente una lista anidada. El código imprimirá [1, 2, [99, 4]] porque la lista anidada sigue siendo el mismo objeto.

# Import the copy module to access the copy.copy() function
import copy

# Original list with nested structure
original_list = [1, 2, [3, 4]]

# Create a shallow copy using copy.copy()
shallow_copied_list = copy.copy(original_list)

# Modifying the nested list in the copied list
shallow_copied_list[2][0] = 99

print(original_list)
[1, 2, [99, 4]]

Utilizando copia.profunda()

La función deepcopy() también está disponible en el módulo copy. Esta función crea una copia profunda de la lista, duplicando la propia lista y todos los objetos anidados. La función deepcopy() es importante cuando se trabaja con objetos mutables dentro de listas, porque garantiza que los cambios en las listas copiadas no afecten a la lista original.

El código siguiente imprime [1, 2, [3, 4]].

# Import the copy module to access the copy.deepcopy() function
import copy

# Original list with nested structure
original_list = [1, 2, [3, 4]]

# Create a deep copy using copy.deepcopy()
deep_copied_list = copy.deepcopy(original_list)

# Modifying the nested list in the copied list
deep_copied_list[2][0] = 99

print(original_list)
[1, 2, [3, 4]]

Conclusión

Comprender cómo copiar listas en Python es importante para una manipulación eficaz de los datos. En este tutorial, hemos aprendido diferentes métodos para copiar una lista en Python y hemos explorado algunas de las diferencias entre los métodos de copia superficial y copia profunda. Como analista de datos, es importante elegir la técnica adecuada de copia de listas en función de tus requisitos específicos. Te animo a que practiques los métodos tratados para comprender mejor sus casos de uso.

Participa en el curso de Programación en Python de DataCamp para avanzar en tus conocimientos de programación con las mejores técnicas. También te animo a que eches un vistazo a nuestras trayectorias profesionales de Desarrollador Python y Analista de Datos con Python para ayudarte a seguir desarrollando habilidades prácticas y relevantes para el trabajo.

Preguntas frecuentes

¿Cuál es la diferencia entre copia superficial y copia profunda?

El método de copia superficial crea una nueva lista referenciándola con los mismos valores que la lista original, de forma que los cambios en los objetos de la lista copiada afectan a la lista original. La copia profunda crea una lista nueva e inserta recursivamente los valores de la lista original, de modo que los cambios en los objetos anidados en la lista copiada no afectan a la lista original.

¿Cuáles son los métodos para crear una copia superficial en Python?

Puedes crear una copia superficial de una lista utilizando el método copy(), el troceado de listas [:], el constructor list() o la función copy() del módulo copy.

¿Cómo se crea una copia profunda de una lista en Python?

Puedes crear una copia profunda de una lista utilizando la función deepcopy() del módulo copy.

Temas

Aprende Python con DataCamp

curso

Introduction to Python

4 hr
5.7M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado
Python 2 vs 3

blog

Python 2 frente a 3: Todo lo que necesitas saber

En este artículo, trataremos las principales diferencias entre Python 2 y 3, cuál es el mejor y por cuál deberías decantarte para comenzar tu andadura en la ciencia de datos
Javier Canales Luna's photo

Javier Canales Luna

6 min

tutorial

Tutorial y Ejemplos de Funciones y Métodos de Listas en Python

Conozca las funciones y métodos de lista de Python. Siga ahora ejemplos de código de list() y otras funciones y métodos de Python.
Abid Ali Awan's photo

Abid Ali Awan

7 min

tutorial

Tutorial de list index() de Python

En este tutorial, aprenderás exclusivamente sobre la función index().
Sejal Jaiswal's photo

Sejal Jaiswal

6 min

tutorial

Guía completa de listas vacías en Python

Aprenda las principales operaciones con listas y los casos de uso de las listas vacías en Python.
Adel Nehme's photo

Adel Nehme

5 min

tutorial

Tutorial de funciones de Python

Un tutorial sobre funciones en Python que cubre cómo escribir funciones, cómo invocarlas y mucho más.
Karlijn Willems's photo

Karlijn Willems

14 min

tutorial

Tutorial de comprensión del diccionario Python

¡Aprende todo sobre la comprensión de diccionarios en Python: cómo puedes utilizarla para crear diccionarios, para sustituir los for loops (anidados) o las funciones lambda por map(), filter() y reduce(), ...!
Sejal Jaiswal's photo

Sejal Jaiswal

14 min

See MoreSee More