los valores y como las variables apuntan con la función id() en Python

Puede que te preguntes por qué el extraño comportamiento con las listas mutables de la sección anterior no ocurre con valores inmutables como los enteros o las cadenas. Podemos usar la función id() de Python para entender esto. Todos los valores en Python tienen una identidad única que se puede obtener con la función id(). Introduce lo siguiente en el shell interactivo:

>>> id('Howdy') # The returned number will be different on your machine.
44491136

Cuando Python ejecuta id('Howdy'), crea la cadena 'Howdy' en la memoria del ordenador. La dirección numérica de memoria donde se almacena la cadena es devuelta por la función id(). Python elige esta dirección basándose en los bytes de memoria que estén libres en tu ordenador en ese momento, por lo que será diferente cada vez que ejecutes este código.

Como todas las cadenas, 'Howdy' es inmutable y no puede ser cambiada. Si «cambias» la cadena en una variable, se está creando un nuevo objeto de cadena en un lugar diferente de la memoria, y la variable se refiere a esta nueva cadena. Por ejemplo, introduzca lo siguiente en el intérprete de comandos interactivo y vea cómo cambia la identidad de la cadena a la que se refiere bacon:

>>> bacon = 'Hello'
>>> id(bacon)
44491136
>>> bacon += ' world!' # A new string is made from 'Hello' and ' world!'.
>>> id(bacon) # bacon now refers to a completely different string.
44609712

Sin embargo, las listas pueden ser modificadas porque son objetos mutables. El método append() no crea un nuevo objeto lista, sino que cambia el objeto lista existente. A esto lo llamamos «modificar el objeto in situ».

>>> eggs = ['cat', 'dog'] # This creates a new list.
>>> id(eggs)
35152584
>>> eggs.append('moose') # append() modifies the list "in place".
>>> id(eggs) # eggs still refers to the same list as before.
35152584
>>> eggs = ['bat', 'rat', 'cow'] # This creates a new list, which has a new
identity.
>>> id(eggs) # eggs now refers to a completely different list.
44409800

Si dos variables se refieren a la misma lista (como spam y cheese en el articulo anterior) y el valor de la lista cambia, ambas variables se ven afectadas porque ambas se refieren a la misma lista. Los métodos append(), extend(), remove(), sort(), reverse() y otros métodos de lista modifican sus listas en su lugar.

El recolector de basura automático de Python elimina cualquier valor que no esté siendo referido por ninguna variable para liberar memoria. No tienes que preocuparte de cómo funciona el recolector de basura, lo cual es bueno: la gestión manual de la memoria en otros lenguajes de programación es una fuente común de errores.

Deja una respuesta