Saltar al contenido principal

Mutabilidad de listas

La sintaxis para acceder a elementos de una lista es la misma que para acceder a los caracteres de una cadena: el operador corchete. La expresión dentro de los corchetes especifica el índice. Recordemos que los índices comienzan en 0.

print(quesos[0]) # Imprime: Cheddar

A diferencia de las cadenas, las listas son mutables porque pueden cambiar el orden de los elementos de una lista o reasignar un elemento en una lista. Cuando el operador corchete aparece en el lado izquierdo de una asignación, este identifica el elemento de la lista que será asignado:

numeros = [17, 123]
numeros[1] = 5
print(numeros) # Imprime: [17, 5]

El elemento en la posición uno de numeros, que era 123, ahora es 5.

Puedes pensar en una lista como una relación entre índices y elementos. Esta relación se llama mapeo. Cada índice mapea a uno de los elementos.

Los índices en una lista funcionan de la misma manera que los índices de una cadena.

Alias de mutables

Si igualamos una lista a otra, no se copia el contenido de una a otra, sino que se crea un alias. Esto ocurre para todos los tipos de datos que son mutables.

Veamos un ejemplo:

lista_original = [1, 2, 3]
alias_lista = lista_original

alias_lista.append(4)
print(lista_original) # Salida: [1, 2, 3, 4]

Aquí alias_lista referencia al mismo objeto que lista_original, por lo que cualquier cambio en alias_lista también afectará a lista_original.

Copiar mutables

Si quieres realizar una copia de un tipo de datos mutable, como son las listas, puedes usar deepcopy() para crear una copia totalmente independiente:

import copy

lista_original = [1, 2, 3]
alias_lista = copy.deepcopy(lista_original) # Crea una copia completa

alias_lista.append(4)
print(lista_original) # Salida: [1, 2, 3]
print(alias_lista) # Salida: [1, 2, 3, 4]