Trabajando con variables
Como hemos indicado anteriormente las variables en python no se declaran, se determina su tipo en tiempo de ejecución empleando una técnica que se lama tipado dinámico.
¿Qué es el tipado dinámico?
En python cuando asignamos una variable, se crea una referencia (puntero) al objeto creado, en ese momento se determina el tipo de la variable. Por lo tanto cada vez que asignamos de nuevo la variable puede cambiar el tipo en tempo de ejecución.
>>> var = 3
>>> type(var)
<class 'int'>
>>> var = "hola"
>>> type(var)
<class 'str'>
Objetos inmutables y mutables
Objetos inmutables
Python procura no consumir más memoria que la necesaria. Ciertos objetos son inmutables, es decir, no pueden modificar su valor. El número 2 es siempre el núumero 2. Es un objeto inmutable. Python procura almacenar en memoria una sola vez cada valor inmutable. Si dos o más variables contienen ese valor, sus referencias apuntan a la misma zona de memoria.
Ejemplo
Para comprobar esto, vamos a utilizar la función id
, que nos devuelve el identificador de la variable o el objeto en memoria.
Veamos el siguiente código:
>>> a = 5
Podemos comprobar que a
hace referencia al objeto 5
.
>>> id(5)
10771648
>>> id(a)
10771648
Esto es muy distinto a otros lenguajes de programación, donde una variable ocupa un espacio de memoria que almacena un valor. Desde este punto cuando asigno otro número a la variable estoy cambiando la referencia.
>>> a = 6
>>> id(6)
10771680
>>> id(a)
10771680
Las cadenas también son un objeto inmutable, que lo sean tiene efectos sobre las operaciones que podemos efectuar con ellas. La asignación a un elemento de una cadena, por ejemplo está prohibida:
>>> a = "Hola"
>>> a[0]="h"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
De los tipos de datos principales, hay que recordar que son inmutables son los números, las cadenas o las tuplas.
Objetos mutables
El caso contrario lo tenemos por ejemplo en los objetos de tipo listas, en este caso las listas son mutables. Se puede modificar un elemento de una lista.
Ejemplo
>>> a = [1,2]
>>> b = a
>>> id(a)
140052934508488
>>> id(b)
140052934508488
Como anteriormente vemos que dos variables referencia a la misma lista e memoria. Pero aquí viene la diferencia, al poder ser modificada podemos encontrar situaciones como la siguiente:
>>> a[0] = 5
>>> b
[5, 2]
Cuando estudiamos las listas abordaremos este compartiendo de manera completa. De los tipos de datos principales, hay que recordar que son mutables son las listas y los diccionarios.
Operadores de identidad
Para probar esto de otra forma podemos usar los operadores de identidad:
is
: Devuelve True si dos variables u objetos están referenciando la misma posición de memoria. En caso contrario devuelve False.is not
: Devuelve True si dos variables u objetos no están referenciando la misma posición de memoria. En caso contrario devuelve False.
Ejemplo
>>> a = 5
>>> b = a
>>> a is b
True
>>> b = b +1
>>> a is b
False
>>> b is 6
True
Operadores de asignación
Me permiten asignar una valor a una variable, o mejor dicho: me permiten cambiar la referencia a un nuevo objeto.
El operador principal es =
:
>>> a = 7
>>> a
7
Podemos hacer diferentes operaciones con la variable y luego asignar, por ejemplo sumar y luego asignar.
>>> a+=2
>>> a
9
Otros operadores de asignación: +=
, -=
, *=
, /=
, %=
, **=
, //=
Asignación múltiple
En python se permiten asignaciones múltiples de esta manera:
>>> a, b, c = 1, 2, "hola"