Copiar una lista en Python

Azaz Farooq 30 enero 2023
  1. Copiar una lista en Python usando el método copy()
  2. Copiar una lista en Python usando el método Slicing
  3. Copiar una lista en Python utilizando la función list()
  4. Copiar una lista en Python usando el método de comprensión de listas
  5. Copiar una lista en Python usando el método copy.copy()
  6. Copia profunda de una lista de Python vs Copia superficial
Copiar una lista en Python

Una lista es un tipo de datos flexible disponible en Python y se encierra entre corchetes [] con valores separados por comas. Los valores de la lista pueden ser de diferentes tipos de datos. La indexación de la lista comienza en 0, y puede ser concatenada y cortada. Los valores de la lista pueden copiarse como un nuevo valor de la lista utilizando diferentes funciones incorporadas.

Este artículo presentará diferentes métodos para copiar una lista en Python.

Copiar una lista en Python usando el método copy()

La forma más directa de copiar una lista en Python es a través del método copy(). Podemos encontrar un escenario en el que queramos hacer una copia de la lista. El signo de igualdad = se puede utilizar para construir un duplicado de una lista. Sin embargo, la nueva lista estará vinculada a la existente. Esto significa que la nueva lista también se verá alterada si se actualiza la lista original. La nueva lista se refiere a un elemento similar a la lista antigua.

Una copia de una lista existente se genera con el método copy() de la lista. El método copy() no toma ningún parámetro.

Tomemos un ejemplo de nombres de frutas como una lista de Python. La nueva lista copiará todos los nombres de frutas que existen en la lista anterior. El código de ejemplo es el siguiente.

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = fruits_spring.copy()
print(fruits_summer)

Producción :

['carrots', 'kiwi', 'grapes', 'cherry']

Copiar una lista en Python usando el método Slicing

En Python, el slicing es un método que utilizamos para extraer objetos de una lista. Podemos recuperar objetos individuales, varios elementos, o todos los elementos contenidos dentro de una lista utilizando el método slicing.

Usemos el ejemplo anterior para ilustrar cómo podemos copiar una lista usando slicing.

El código de ejemplo completo es el siguiente.

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = fruits_spring[:]
print(fruits_summer)

Producción :

['carrots', 'kiwi', 'grapes', 'cherry']

Utiliza la forma de clonación, dos puntos encerrados dentro de corchetes ([:]). Este proceso genera una réplica de la lista antigua.

Copiar una lista en Python utilizando la función list()

También podemos construir una copia de una lista en Python utilizando la función list(). La función list() toma un parámetro: el objeto(s) que quieres convertir en una lista.

Utilicemos el ejemplo de nuestro frutero para demostrar este enfoque.

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = list(fruits_spring)
print(fruits_summer)

Producción :

['carrots', 'kiwi', 'grapes', 'cherry']

Copiar una lista en Python usando el método de comprensión de listas

Este enfoque utiliza la comprensión de listas. Recorre todos los elementos de la lista existente mediante el bucle for y añade los nuevos elementos de la lista.

El código de ejemplo completo se da como:

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = [i for i in fruits_spring]
print(fruits_summer)

Producción :

['carrots', 'kiwi', 'grapes', 'cherry']

Copiar una lista en Python usando el método copy.copy()

También podemos utilizar el método copy() del módulo copy para copiar una lista en Python.

El código de ejemplo completo es el siguiente:

import copy

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]

fruits_summer = copy.copy(fruits_spring)

print(fruits_summer)

Producción :

['carrots', 'kiwi', 'grapes', 'cherry']

Copia profunda de una lista de Python vs Copia superficial

Todos los métodos introducidos anteriormente son copias superficiales. La copia superficial significa que si el elemento de la lista es mutable y este elemento se modifica en la lista original, esta modificación también se reflejará en la lista copiada. La copia superficial sólo copia el puntero o la referencia a los elementos de la lista.

original_list = [["carrots", "apple"], "kiwi", "grapes", "cherry"]

print("The original list is")
print(original_list)

copied_list = original_list.copy()

original_list[0][0] = "banana"
original_list[0][1] = "apple"
original_list[1] = "orange"

print("The original list after modification is")
print(original_list)
print("The copied list is")
print(copied_list)

Resultado:

The original list is
[['carrots', 'apple'], 'kiwi', 'grapes', 'cherry']
The original list after modification is
[['banana', 'apple'], 'orange', 'grapes', 'cherry']
The copied list is
[['banana', 'apple'], 'kiwi', 'grapes', 'cherry']

El primer elemento de la lista original también es una lista mutable. Cuando cambiamos su contenido, se modifica el elemento correspondiente en la lista copiada. Mientras tanto, el segundo elemento de la lista original es un objeto inmutable, por lo que su cambio no se reflejará en la lista copiada.

La copia profunda, a diferencia de la copia superficial, copia los objetos de la lista original de forma recursiva en la nueva lista. Así, la modificación en la lista original no se reflejará en la lista copiada. El método deepcopy() del módulo copy realiza la operación de copia profunda.

import copy

original_list = [["carrots", "apple"], "kiwi", "grapes", "cherry"]

print("The original list is")
print(original_list)

copied_list = copy.deepcopy(original_list)

original_list[0] = ["banana", "apple"]
original_list[1] = "orange"

print("The original list after modification is")
print(original_list)
print("The copied list is")
print(copied_list)

Producción :

The original list is
[['carrots', 'apple'], 'kiwi', 'grapes', 'cherry']
The original list after modification is
[['banana', 'apple'], 'orange', 'grapes', 'cherry']
The copied list is
[['carrots', 'apple'], 'kiwi', 'grapes', 'cherry']

Artículo relacionado - Python List