Variables y direcciones de memoria

PythonBeginner
Practicar Ahora

Introducción

En este tutorial, exploraremos las variables de Python, las direcciones de memoria y las diferencias entre los tipos de datos mutables e inmutables:

  • Tipos de datos inmutables: Estos tipos de datos no pueden ser modificados después de su creación. Ejemplos incluyen int, float, str, tuple y frozenset.
  • Tipos de datos mutables: Estos tipos de datos pueden ser modificados después de su creación. Ejemplos incluyen list, dict y set.

Con los tipos de datos inmutables, cualquier cambio resulta en la creación de un nuevo objeto, mientras que los tipos de datos mutables pueden ser modificados en el lugar. Comprender esta distinción es crucial al trabajar con direcciones de memoria y asignación de variables.

Veremos la asignación de variables, las características de los tipos de datos mutables e inmutables y el operador is para comparar direcciones de memoria. ¡Comencemos!

Asignación de variables y direcciones de memoria

En Python, las variables son simplemente referencias a las ubicaciones de memoria donde se almacenan los valores. Cuando asignas un valor a una variable, Python crea un nuevo objeto (si es necesario) y hace que la variable apunte a ese objeto.

Abre primero el intérprete de Python:

python

Veamos un ejemplo:

x = 10
y = x

En este ejemplo, la variable x se le asigna el valor 10. Cuando asignamos x a y, ambas variables ahora apuntan a la misma ubicación de memoria. Podemos comprobar esto usando la función id():

print(id(x))  ## Salida: dirección de memoria de x
print(id(y))  ## Salida: dirección de memoria de y, que debería ser la misma que x

El operador is

En Python, el operador is compara las direcciones de memoria de dos objetos. Si las direcciones de memoria son iguales, el operador is devuelve True; de lo contrario, devuelve False. Esto es diferente del operador ==, que compara los valores de los objetos.

x = [1, 2, 3]
y = x
z = [1, 2, 3]

print(x is y)  ## Salida: True (x e y tienen la misma dirección de memoria)
print(x is z)  ## Salida: False (x y z tienen direcciones de memoria diferentes)

Comparar direcciones de memoria

En este paso, compararemos las direcciones de memoria de variables con el mismo valor.

Siga las instrucciones siguientes:

## Cree dos variables enteras `a` y `b` con el mismo valor.
a = 10
b = 10
## Cree dos variables de lista `c` y `d` con los mismos elementos.
c = [1, 2, 3]
d = [1, 2, 3]

## Compare las direcciones de memoria de `a` y `b`, así como de `c` y `d`.
print(a is b)  ## Salida: True
print(c is d)  ## Salida: False

En el ejemplo anterior, creamos dos variables enteras a y b con el mismo valor.

También creamos dos variables de lista c y d con los mismos elementos.

Cuando comparamos las direcciones de memoria de a y b, el operador is devolvió True. Esto se debe a que a y b comparten la misma dirección de memoria.

Sin embargo, cuando comparamos las direcciones de memoria de c y d, el operador is devolvió False. Esto se debe a que c y d tienen direcciones de memoria diferentes.

Entonces, ¿qué significa esto?

  1. Los tipos de datos inmutables con el mismo valor pueden tener la misma dirección de memoria.
  2. Los tipos de datos mutables con el mismo valor tienen direcciones de memoria diferentes.

Modificando un tipo de datos mutable

A continuación, crearemos y modificaremos un tipo de datos mutable juntos.

## Cree dos variables `x` e `y` que apunten a la misma lista.
x = [1, 2, 3]
y = x

## Modifique la lista usando la variable `x`.
x.append(4)

## Observe los cambios en la variable `y`.
print(y)  ## Salida: [1, 2, 3, 4] (y también refleja los cambios porque x e y comparten la misma dirección de memoria)

En este ejemplo, creamos dos variables x e y que apuntan a la misma lista.

Cuando modificamos la lista usando la variable x, los cambios también se reflejaron en la variable y. Esto se debe a que x e y comparten la misma dirección de memoria.

Modificando un tipo de datos inmutable

Finalmente, trabajemos juntos para modificar uno tras otro un tipo de datos inmutable.

## Cree dos variables `a` y `b` que apunten a la misma cadena de texto.
a = "hello"
b = a

## Modifique la cadena de texto usando la variable `a`.
a = a + ", world"

## Observe los cambios en la variable `b`.
print(b)  ## Salida: "hello" (b no cambia porque se creó un nuevo objeto al modificar la cadena de texto)

En este ejemplo, creamos dos variables a y b que apuntan a la misma cadena de texto.

Cuando modificamos la cadena de texto usando la variable a, los cambios no se reflejaron en la variable b. Esto se debe a que a y b tienen direcciones de memoria diferentes.

Resumen

En este tutorial avanzado, profundizamos más en las variables de Python y las direcciones de memoria. Discutimos la asignación de variables, los tipos de datos mutables e inmutables y el operador is para comparar direcciones de memoria. También practicamos estos conceptos con ejercicios prácticos. Comprender estos conceptos avanzados te ayudará a convertirse en un programador de Python más habilidoso, ya que brinda una comprensión más profunda de cómo Python gestiona la memoria y cómo funcionan las variables en un nivel más profundo.