Tipos de Datos en Python: Un Primer Vistazo

Python cuenta con un conjunto de tipos de datos integrados (built-in) poderoso y funcional que nos permite abordar exitosamente un sinnúmero de problemas de computación casi sin la necesidad de crear tipos de datos nuevos y/o personalizados. Este conjunto incluye lo tipos numéricos, las colecciones (listas, tuplas, conjuntos, diccionarios), las cadenas de caracteres, entre otros.

Mutables e Inmutables

Los tipos de datos integrados de Python se dividen en dos grandes grupos:

  • Tipos Inmutables: sus valores no pueden ser alterados o modificados en el lugar

  • Tipos Mutables: sus valores pueden ser alterados o modificados en el lugar

En el primer grupo se encuentran los datos numéricos, es decir, los enteros (integers), los de coma flotante (floatingpiont) y los números complejos (complex numbers). También clasifican en este grupo las cadenas (strings), las tuplas (tuples), los conjuntos congelados (frozensets) y los rangos (ranges).

En el segundo grupo se incluyen las listas (lists), los diccionarios (dictionaries) y los conjuntos (sets).

Los tipos numéricos

Los tipos numéricos incluidos (built-in) de Python son:

  • Enteros (int): son números que no tienen una parte fraccionaria, en Python tienen precisión ilimitada, lo que significa que pueden ser de cualquier tamaño, la única limitación sería la memoria física del ordenador donde estemos trabajando

>>> i = 15

>>> type(i)

<class 'int'>

  • De Coma Flotante (float): son números que sí tienen una parte fraccionaria. Se implementan como el double de C

>>> f = 10.5

>>> type(f)

<class 'float'>

  • Números complejos (complex): los números complejos tienen una parte real y otra imaginaria, cada una de ellas representada por un número de Coma Flotante.

>>> c = 1+2j

>>> type(c)

<class 'complex'>

Todos los miembros de este grupo son inmutables.

Las Secuencias

En esta clasificación se agrupan las cadenas de caracteres, las listas, las tuplas y los rangos. De forma general las secuencias son contenedores datos ordenados secuencialmente a los que se puede acceder a través de índices numéricos (enteros) que van desde cero hasta la longitud de la secuencia menos uno. El orden de los datos en una secuencia se corresponde con el orden en que se agregan estos en la creación de la misma. Veamos los tipos de secuencias, tanto mutables como inmutables de Python:

  • Cadenas de caracteres (str): las cadenas son secuencias inmutables de caracteres Unicode (En Python 3.x)

>>> s = 'Hola Mundo!'

>>> type(s)

<class 'str'>

  • Listas (list): las listas son secuencias mutables de datos. Los datos contenidos en una lista pueden ser de cualquier tipo, sin necesidad de que sean de tipo homogéneo, es decir, una lista puede contener un entero, seguido de una cadena, o de otra lista o de una tupla, en fin, las listas son estructuras muy flexibles y útiles y en la práctica son uno de los tipos de datos más empleados en Python

>>> l = [1, 'abc', (2, 3), 4, [5, 6], 7, 8, 9]

>>> type(l)

<class 'list'>

>>> l[1] # Accedemos a los elementos de la secuencia a través de sus índices

'abc'

>>> l[4]

[5, 6]

>>> l[4][0] # Doble índice para acceder a elementos de la secuencia anidada

5

  • Tuplas (tuple): la tuplas son secuencias inmutables de datos. Realmente son estructuras de datos bien simples. Su contenido puede ser heterogéneo en cuanto a tipo de dato y vienen a mano cuando necesitamos una secuencia heterogénea que no pueda ser modificada por el código cliente

>>> t = (1,'a', 2, [3, 4])

>>> type(t)

<class 'tuple'>

  • Rangos (range): los rangos representan una secuencia inmutable de números enteros que podemos emplear para los ciclos, especialmente los ciclos for

>>> r = range(10)

>>> type(r)

<class 'range'>

>>> r

range(0, 10)

>>> list(r)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Los Conjuntos

Los conjuntos son contenedores de datos únicos y sin un orden definido. Son comúnmente empleados en operaciones de pruebas de membrecía y en la remoción de duplicados, pero su punto fuerte son las operaciones matemáticas de teoría de conjuntos, como pueden ser la intercepción, la unión, la diferencia y la diferencia simétrica. Existen dos tipos básicos de conjuntos:

  • Conjuntos (set): los conjuntos son colecciones mutables de datos heterogéneos, hashables* y únicos, es decir, datos que no se repiten. Su contenido puede modificarse empleando métodos como add() y remove()

>>> s = {3, 4, 5, 'a', 'b', (4, 5)}

>>> type(s)

<class 'set'>

  • Conjuntos congelados (frozenset): los conjuntos congelados son colecciones inmutables de datos heterogéneos y únicos

>>> fs = frozenset((1, 2, 3, 4, 'x', 'y', 'z', (15, 20)))

>>> type(fs)

<class 'frozenset'>

Tipos de Mapeo

Un tipo de mapeo nos permite mapear o relacionar valores hashables con objetos arbitrarios.

Los tipos de mapeo son mutables. En la actualidad existe un único tipo de mapeo estándar: el diccionario. Los diccionarios representan un de las estructuras de datos más útiles empleada en Python, pues gran parte del núcleo de lenguaje se sustenta en el empleo de diccionarios; los espacios de nombres son un ejemplo típico de esto.

  • Diccionarios (dict): mapean o relacionan claves (keys) con valores (values), las claves pueden ser valores arbitrarios siempre y cuando sean hashables, y los valores no tiene restricción de tipo. Se puede acceder a los valores usando las claves como índice. Hasta la versión 3.5 del lenguaje, los pares clave-valor de los diccionarios no tienen un orden fijo dentro del diccionario; ya en la versión 3.6 los diccionarios fueron re-implementados para ser mucho más eficientes y de paso esta nueva implementación garantiza que los pares clave-valor mantengan el mismo orden en que se agregaron en el momento de la creación del diccionario

>>> d = {1: 'a', 2: 'b', 'l': [1, 2, 3, 4], 't': (5, 6, 7)}

>>> type(d)

<class 'dict'>

>>> d['l'] # Accedemos a los valores a través de las claves

[1, 2, 3, 4]

Bien, esto es todo por ahora, si este artículo te resultó interesante y/o útil, compártelo para que otros también puedan acceder a él. Déjanos tus comentarios y podremos mejorar nuestros contenidos.

Gracias de antemano,

lpozo

* Básicamente un valor es hashable si es de tipo inmutable.