Cada objecto en Python es clasificado como inmutable o no. En términos de los tipos principales en Python podemos diferencias los siguientes.

Tipos inmutables

  • Números
  • Cadenas
  • Tupas

Tipos mutables

  • Listas
  • Diccionarios
  • Sets

Que un tipo sea inmutable significa que no puede ser cambiado luego de haber sido creado.

Veamos un ejemplo para que nos quede mas claro.

>>> apellido = 'Gonzales'
>>> apellido
'Gonzales'
>>> apellido[0] = 'g'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> apellido
'Gonzales'

En este ejemplo hemos asignado la cadena 'Gonzales' a la variable apellido. Luego estamos intentando cambiar la primera letra de la cadena, y por supuesto, nos tira un error.

El error se traduciría como: "El objeto 'str' no soporte la asignación de elementos"

Y esto se da porque estamos intentando cambiar el valor de un objeto inmutable, ya que las cadenas en Python son inmutables.

Lo que si podríamos hacer es asignarle un nuevo valor a la variable que no vendría a ser lo mismo que cambiar la cadena.

>>> apellido = 'g' + apellido[1:]
>>> apellido
'gonzales'

Según este ejemplo pareciera que estamos cambiando la cadena, pero en realidad lo que estamos haciendo es asignándole un nuevo valor, ya que si te das cuenta, le estamos pasando el signo = y el nuevo valor que queremos que tenga esa variable.

Entre otras cosas, la inmutabilidad (inmutability) se puede utilizar para garantizar que un objeto permanezca constante en todo el programa; los valores de los objetos mutables se pueden cambiar en cualquier momento y lugar (y si lo espera o no).

Te recomiendo que practiques con más tipos intentado cambiarlos para que domines este tema, ya que es crucial que sepas como funciona Python para que desarrolles programas correctamente.