Cuando un novato ingresa al mundo de la programación y comienza a aprender sobre diferentes conceptos y, sin embargo, eventualmente llega a las estructuras de datos y algoritmos , aprendiendo e implementándolos, pero de una forma u otra tiende a leer una vez y olvidarse de el objeto inmutable .
Mutables e inmutables existen en todos los lenguajes de programación, sin embargo, uno solo tiende a preocuparse por los mutables, como listas, colas, etc., y no presta atención a los inmutables porque, a primera vista, parece ser solo un complemento y no Parece que tiene aplicaciones de resolución de problemas de la vida real, y para desacreditar esta idea, analicemos el concepto, la necesidad y las limitaciones.
¿Qué son los objetos inmutables?
La mutabilidad es una propiedad diferenciadora de un tipo de datos en Python que hace un gran contraste con los otros tipos de datos. Suele ser una capacidad de los tipos de datos para permitir que se modifiquen después de su creación, a lo que se puede agregar un valor así como se puede sacar de ella. Por otro lado, mirando hacia el otro lado también hay objetos que no siguen este principio y son inalterables y no permiten ninguna modificación después de haber sido definidos. Su estado no se puede cambiar en absoluto, tiende a representar un valor constante una vez inicializado. Ejemplos: entero, complejo, string, flotante, tupla, complejo, conjunto congelado.
Por lo tanto, si alguna variable ha inicializado un valor correspondiente a cualquiera de estos tipos de datos inmutables, no se puede cambiar nunca. Para cambiarlo, uno tiene que inicializar la misma variable a la modificación que desea. Cuando una variable se reasigna a alguna otra string, tiende a asignar una ubicación de memoria diferente para ambos objetos.
Ejemplo:
Python3
# string initialized var = 'Geeks' print(id(var)) print(var) # Reassigned to another value var = 'For Geeks' # New Memory Location assigned print(id(var)) print(var)
Producción:
139758810541392 Geeks 139758782345520 For Geeks
Nota: en Python, tiende a haber una excepción en el caso de la inmutabilidad de la tupla, ya que las tuplas en sí mismas son inmutables, pero no se pueden modificar después de inicializarse y los valores que se le dan en el momento de la inicialización son los valores finales que contiene, no se puede agregar nada o eliminar valor a/de él. Sin embargo, un campo mutable como una Lista incrustada en una tupla se puede modificar sin ningún error y, sin embargo, prueba que los objetos a los que hace referencia la tupla se pueden modificar, este fenómeno se denomina ocasionalmente «no transitivo». inmutabilidad” .
En Python, los codificadores tienen más ventajas de optimización en torno a la propiedad de inmutabilidad, principalmente para los objetos de string.
Ejemplo:
Python3
var1 = 'GFG' var2 = 'GFG' var3 = 'GFG' var4 = 'GFG' var5 = 'GFG' # All the variables points to a # single String print(id(var1), id(var2), id(var3), id(var4), id(var5))
Producción:
140080377558384 140080377558384 140080377558384 140080377558384 140080377558384
Si uno tiende a crear 20 objetos de string uno tras otro, manteniendo los mismos valores, entonces Python no asignará diferentes ubicaciones de memoria para cada valor, pero hará que cada identificador se refiera a la misma string como nunca lo hará. modificarse aún más, ahorrando así mucha memoria. La excepción es que el mismo escenario no será aplicable para todos los objetos inmutables que no sean una string, pero este truco de optimización demuestra ser dependiente de la implementación.
¿Por qué preocuparse por los Inmutables?
- Mejora la exactitud y la simplicidad de todo el código, ya que proporciona una facilidad para que el codificador pase el objeto en el programa sin ningún temor, ya que parece que nunca se modifica. mientras que lo mutable es mucho más difícil de razonar. En mutable, el aliasing conduce a muchas irregularidades y, finalmente, intimida la fidelidad del código, lo que al final da como resultado la variabilidad.
- Seguro para subprocesos : como un objeto después de la asignación no se puede modificar, esto deduce que se comparten datos de solo lectura entre los subprocesos, lo que sin duda proporciona seguridad para subprocesos. En palabras más simples, en los inmutables, dado que no hay posibilidad de cambio para un objeto, no hay necesidad de tener miedo de acceder a él desde muchos subprocesos. La mutación en cualquier sentido en objetos inmutables se puede lograr de tal manera que uno cree un nuevo objeto en lugar de tratar de modificar los existentes.
Limitaciones
Con el tiempo, se introducen diferentes conclusiones, ya que leemos que Immutables es seguro para subprocesos, y no importa qué subproceso lea sus valores, obtienen los valores correctos, pero se descubre que los inmutables son inmunes a los «Errores de coherencia de memoria» , que se puede explicar además como; Los objetos inmutables por sí mismos no son seguros para subprocesos. Es el código que los usa el que debe escribirse para que sea seguro para subprocesos. El simple uso de objetos inmutables no es suficiente para lograr esto. Uno también tiene que protegerse contra el punto muerto, el bloqueo vivo y el hambre.
Publicación traducida automáticamente
Artículo escrito por JatinMithrani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA