2.3. Tipos dinámicos y fuerte tipado

Python implementa tipos dinámicos. Esto quiere decir que el tipo de un objeto (en Python todo son objetos) se comprueba dinámicamente cada vez que es necesario dicho objeto. A un objeto se le asigna un tipo en el momento en que es asignado. Pero podemos realizar asignaciones de diferentes tipos. Esto significa que un mismo identificador puede referenciar objetos de tipo diferente en distintos puntos del programa. De esta forma es legal:


>>> a = 7
>>> # a es un entero
...
>>> a = 'pepe'
>>> # a es una cadena
...
>>> a = [1,7,'pepe']
>>> # a es una lista

En lenguajes compilados, suele implementarse tipos de datos estáticos. Esto significaría que durante la vida de un programa, una variable no puede cambiar de tipo.

Pese a sus tipos dinámicos, Python es un lenguaje fuertemente tipado. Un lenguaje es fuertemente tipado si sus tipos se mantienen de manera consistente (en Python si no hay una nueva asignación). Esto quiere decir que no podemos sumar una cadena y un entero, por ejemplo:


>>> 'pepe' + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects

provoca un error. Es necesario realizar una conversión explícita de tipos:


>>> 'pepe' + str(1)
'pepe1'

Otros ejemplos de lenguajes fuertemente tipados son Java, Pascal o C. Un lenguaje débilmente tipado es Visual Basic (Basic). En VB se permite concatenar la cadena '12' con el entero 3 y después tratar el conjunto como un entero sin conversión de tipos.