Objetos mutables e inmutables en Python {EJEMPLOS}

¿Qué es un objeto mutable?

Mutable en Python se puede definir como el objeto que puede cambiar o considerarse como algo cambiable por naturaleza. Mutable significa la capacidad de modificar o editar un valor.

Los objetos mutables en Python permiten a los programadores tener objetos que pueden cambiar sus valores. Generalmente se utilizan para almacenar una colección de datos. Puede considerarse como algo que ha mutado y el estado interno aplicable dentro de un objeto ha cambiado.

¿Qué son los objetos inmutables?

Los objetos inmutables en Python se pueden definir como objetos que no cambian sus valores y atributos con el tiempo.
Estos objetos se vuelven permanentes una vez creados e inicializados, y forman una parte crítica de las estructuras de datos utilizadas en Python.

Python se usa en números, tuplas, cadenas, conjuntos congelados y clases definidas por el usuario con algunas excepciones. No pueden cambiar, y sus valores permanecen permanentes una vez que se inicializan y, por lo tanto, se denominan inmutables.

En Python, todo es un objeto.

En el lenguaje de programación Python, todo puede considerarse como un objeto que comprende listas, números enteros y funciones. Esta característica se puede comparar con otros lenguajes de programación que admiten objetos.

Esta característica se puede verificar utilizando un intérprete de Python como se muestra a continuación: –

Código Python:

print("The following instance is an object:",isinstance(3,object))
print("Another instance for object", isinstance(True, object))
def my_func():
    return "guru99"
print("This is a function example and regarded as an object in Python:", isinstance(my_func, object))

Salida:

A following instance is an object: True
Another instance for object True
This is a function example and regarded as an object in Python: True

Además, Python proporciona una función incorporada llamada id que devuelve la dirección del objeto tal como está presente en la memoria del lenguaje de programación Python.

Código Python:

z=200
id(z)
print("The id of object is", id(z))

Salida:

the id of object is 9795360

En el código anterior, la función id que tiene la sintaxis id(obj) proporciona la dirección de obj en la memoria de Python. Aquí, hay un objeto llamado z, y tiene una asignación de 200. Luego, el objeto z se pasa a la función id como id(z), y Python entrega la dirección del objeto como 9795360.

Objetos mutables en Python

En un objeto mutable, el valor del objeto cambia durante un período de tiempo.

En este ejemplo, hemos explicado los objetos mutables en Python, y esto utiliza listas como una aplicación de objetos mutables como se muestra a continuación: –

Código Python:

mut_list = [1, 2, 3]
  print("The list in Python",mut_list)
mut_list[0] = 'Gurru99'
mut_list
  print("The list in Python after changing value",mut_list)

Salida:

The list in Python [1, 2, 3]
The list in Python after changing value ['Gurru99', 2, 3]

Como podemos ver en el ejemplo anterior, la lista mutable en Python tenía valores de 1,2,3. El primer elemento de la lista mutable cambia de 1 a Guru99 y no crea un nuevo objeto cuando se inicializa un nuevo valor.

Aquí podemos usar el método id para utilizarlo. seguirwing ilustra el uso del método id para objetos mutables como se muestra a continuación: –

Código Python:

mut_list = [1, 2, 3]
print("The list in Python",mut_list)
print("the id of the list is ",id(mut_list))
mut_list[0] = 'Gurru99'
mut_list
print("The mut list in Python after changing value",mut_list)
print("the id of the list is post change in value",id(mut_list))

Salida

The list in Python [1, 2, 3]
the id of the list is 139931568729600
The list in Python after changing value ['Gurru99', 2, 3]
the id of the list is post change in value 139931568729600

El following La figura ilustra el objeto mutable en Python como se muestra a continuación: –

Objetos mutables en Python

Objetos inmutables en Python

Los objetos inmutables en Python son objetos en los que las instancias no cambian durante el período. Las instancias inmutables de un tipo específico, una vez creadas, no cambian, y esto se puede verificar utilizando el método id de Python.

Tomemos un ejemplo de objetos de tipo entero en Python que ilustra el concepto de objetos inmutables en Python como se muestra a continuación: –

Código Python:

a=244
print("the number before change is",a)
print("the id of number before change is",id(a))
a=344
print("the number after change is",a)
print("the id of number after change is",id(a))

Salida

the number before a change is 244
the id of number before change is 9796768
the number before change is 344
the id of number before change is 140032307887024

Arriba se pudo ver que hay un cambio en "a". Estudiemos cómo funciona el mecanismo:

  • No hay ningún cambio en el valor del objeto cuando se inicializa "a" con 344.
  • En cambio, se crea un nuevo objeto y se limita con "a".
  • El otro objeto asignado como 244 ya no sería accesible.
  • El ejemplo anterior utilizó un objeto entero.

En a=244, se crea un nuevo objeto y se hace referencia a "a" como se muestra a continuación: –

Objetos inmutables en Python

Publicar usando a=344, hay un nuevo objeto al que se hace referencia con "a". el siguientewing El diagrama representa lo mismo: –

Objetos inmutables en Python

Por lo tanto, siempre que se asigna un nuevo valor al nombre de tipo int, hay un cambio en la vinculación del nombre con otro objeto. El mismo principio se aplica a las tuplas, instrumentos de cuerda, flotante y booleano, por lo que se denomina inmutable.

Implicaciones para las claves del diccionario en Python

Los diccionarios se pueden definir como colecciones ordenadas que almacenan datos en formato clave y no permiten duplicados. Los diccionarios contienen una clave que tiene el par de valores correspondiente alineado. Son de tipos mutables y su contenido se puede cambiar incluso después de su inicialización y creación.

En cualquier momento, la clave apunta a un elemento específico a la vez. Las claves de los diccionarios son inmutables.

Tomemos un escenario hipotético como se muestra a continuación: –

a = [4, 6]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

Salida: – El código Python anterior no produce ningún resultado y, en cambio, genera un error de tipo que no se puede dividir en hash. Esta es una situación hipotética y no se utiliza en el compilador de Python.

Aquí, a se define como [4,6] y en el diccionario se define como x. Aquí, b se define como [5,6,7] y en el diccionario se define como y.

  • La clave 'a' tiene el valor de [4,6] y se inicializa aún más en x.
  • La clave 'b' tiene el valor de [5,6,7] que luego se inicializa a 'y' en un diccionario.
  • Ahora supongamos que el valor de 'una' Se añaden 5 y 7, que es una clave para el diccionario.
  • Entonces el diccionario ha sido mutado y daría a ambos 'X' y 'y' como valores para el diccionario anterior.

Considere lo siguientewing escenario como se ilustra arriba: –

a = [5, 6,7]
b = [5, 6, 7]
my_dict = {a: 'x', b: 'y'}
print(my_dict)

Por lo tanto, como lenguaje de programación, Python hace que las claves del diccionario sean inmutables y los diccionarios sean tipos de datos inmutables.

Excepciones en la inmutabilidad

Sin embargo, Python proporciona excepciones a la inmutabilidad; dichas excepciones se pueden observar para el tipo de objeto tupla. Una tupla puede ser una combinación de tipos de objetos mutables e inmutables. Tomemos un ejemplo para explicar las excepciones en inmutabilidad como se muestra a continuación: –

Código Python:

tupexample=([1,1],'guru99')
print("the tuple before change",tupexample)
print("the id of tuple before change",id(tupexample))
tupexample=([2,2],'guru99')
print("the tuple after change",tupexample)
print("the id of tuple after change",id(tupexample))

Salida:

the tuple before change ([1, 1], 'guru99')
the id of tuple before change 140649480694656
the tuple after change ([2, 2], 'guru99')
the id of tuple after change 140649480694592

Puede ver en el código anterior que el primer elemento, que es una lista, es mutable, mientras que la tupla es inmutable. El valor de la tupla no se puede cambiar, pero el contenido de la lista presente dentro de la tupla puede cambiar su valor.

Por lo tanto, esto plantea una excepción: los objetos inmutables no cambian su valor, pero el valor de los constituyentes cambia su valor.

Objetos mutables versus inmutables

Estas son las principales diferencias entre objetos mutables e inmutables:

Objeto mutable Objeto inmutable
El estado del objeto se puede cambiar una vez creado. El estado del objeto no se puede cambiar una vez creado.
Los objetos mutables no se consideran de naturaleza segura para subprocesos. Los objetos inmutables se consideran de naturaleza segura para subprocesos.
Los objetos mutables no se vuelven definitivos y, por lo tanto, el programador puede seguir cambiando objetos mutables y usar los mismos objetos. Es fundamental hacer que las clases sean definitivas cuando se crea el objeto inmutable.

Tipos de datos inmutables de Python

Clase Explicación Inmutable o no
bool Valor booleano Inmutable
Int. Valor entero (la magnitud puede ser arbitraria) Inmutable
Flotador Número de punto flotante Inmutable
Lista Secuencia de objetos de naturaleza mutable. Mudable
Tupla Secuencia de objetos de naturaleza inmutable. Inmutable
Str. Cadena de caracteres Inmutable
Set conjunto de objetos distintos que son de naturaleza desordenada Mudable
Congelado Establecer clase de naturaleza inmutable. Inmutable
Dict Diccionario o mapeo asociativo Mudable