Tipos de datos y sus clases

← Fundamentos de Python ⌂ Home

Objetivos

Desarrollo

Python es un lenguaje orientado a objetos y las clases forman la base para todos sus tipos de dato. El proceso de crear un nueva instancia de una clase se conoce como instanciación, la sintaxis es la siguiente:

objeto = NombreClase()

Donde objeto es el identificador que apunta a una nueva instancia de la clase NombreClase. Teniendo esto en cuenta el ejemplo del tema anterior edad = 20, resulta en la creación de una nueva instancia de la clase int.

Inmutabilidad

Un concepto importante antes de conocer los tipos de datos es la mutabilidad e inmutabilidad de las clases.

Una clase es inmutable si cada objeto de esa clase tiene un valor fijo después de su instanciación y no puede ser cambiado. Por ejemplo la clase int es inmutable, una vez que se crea una instancia, no puede ser cambiada, solamente el identificador puede ser reasignado a otra instancia, lo vimos en el tema anterior, como solo la referencia cambia.

Tipos de datos

Clase Descripción
bool Valor booleano Inmutable
int Valor entero Inmutable
float Valor punto flotante Inmutable
list Secuencia de objetos Mutable
tuple Secuencia de objetos Inmutable
str Secuencia de caracteres Inmutable
set Conjunto desordenado de objetos Mutable
frozenset Conjunto desordenado de objetos Inmutable
dict Mapeo asociativo Mutable

Constante None

None es una constante especial de Python, cuyo valor es nulo.

Tiene su propio tipo de dato (NoneType), se puede asignar None a cualquier variable y todas las variables cuyo valor es None son iguales entre sí.

Existen tres tipos de valores numéricos: enteros, flotantes y complejos. Además, los booleanos son un subtipo de los enteros y se encuentrar representados por las siguientes clases.

La clase bool

La clase bool es usada para manipular valores lógicos (booleanos) y las únicas dos instancias de esta clase son expresadas con las literales True y False. El constructor bool() regresa por default un valor False:

>>> b = bool()
>>> print(b)
False

Pero no es necesario usar el constructor para asignar un valor, se puede hacer directo con las literales True y False:

>>> b = False
>>> print(b)
False

Python permite la creación de un valor booleano desde un valor no booleano haciendo uso del constructor bool(), por ejemplo:

>>> a = bool(0)
>>> print(a)
False

El comportamiento depende del valor dado. Para números el constructor bool() regresa False si el valor es igual a cero, y True para cualquiera diferente de cero. Secuencias y otros tipos de datos contenedores (str y list) regresan False si se encuentran vacíos y True si se encuentran no vacíos.

En ciertos lugares (como las sentencias if), Python espera que la evaluación de expresiones produzca un booleano. Estos lugares se denominan contextos booleanos.

La clase int

La clase int está diseñada para representar números enteros con una magnitud arbitraria, a diferencia de otros lenguajes como Java donde se tiene que especificar la longitud (int, short, long, etc.) Python automáticamente elige la representación interna basado en la magnitud del valor.

En algunos contextos es conveniente representar los valores numéricos en bases diferentes, Python tiene soporte para binarios, octales y hexadecimales. Esto se puede lograr colocando el número 0 como prefijo seguido de un carácter que describe la base, 0b1001 (binario), 0o41 (octal) y 0x7f (hexadecimal).

El constructor int() regresa por default un valor numérico 0, puede ser usado para truncar un valor flotante o para convertir una cadena a su representación numérica (la cadena debe representar un valor numérico, observar las comillas en el ejemplo).

>>> a = int()
>>> print(a)
0
>>> b = int(3.5)
>>> print(b)
3
>>> c = int(‘4.5’) 
>>> print(c)
4

La clase float

La clase float es el único tipo de punto flotante en Python, la forma típica de representar un valor flotante es con un número decimal como 9.8. Otra forma de representar un valor flotante es con notación científica, por ejemplo, 7.02e13, que representa el valor 7.02x10^13.

El constructor float() regresa el valor 0.0, cuando recibe un parametro entero lo transforma a su representación en flotante, por ejemplo float(2) y al igual que los enteros, cuando se le pasa una cadena con un valor flotante regresa su valor.

>>> a = float()
>>> print(a)
0.0
>>>
>>> b = 7.02e13
>>> print(b)
70200000000000.0
>>>
>>> c = float(2)
>>> print(c)
2.0
>>> 
>>> d = float('3.5')
>>> print(d)
3.5

La clase complex

Finalmente tenemos la clase complex usada para representar números con parte imaginaria, el constructor complex() regresa 0j donde j es la parte imaginaria. El constructor puede recibir dos parámetros, el primero la parte numérica y el segundo la parte imaginaria.

>>> a = complex()
>>> print(a)
0j
>>>
>>> b = complex(2,2)
>>> print(b)
(2+2j)

Si el primer parámetro es una cadena, esta será interpretada como un número complejo y el constructor debe ser llamado sin el segundo parámetro. El segundo parámetro nunca puede ser una cadena.

>>> c = complex('1+2j')
>>> print(c)
(1+2j)

Secuencias

Las clases list, tuple y str tienen en común que son secuencias, representan una colección de valores ordenados. La clase list representa una secuencia arbitraria de objetos (conocida como arreglo en otros lenguajes de programación). La clase tupla representa la versión inmutable de una secuencia de objetos. Y la clase str está diseñada para representar una secuencia inmutable de caracteres.

La clase list

Una instancia de la clase list almacena una secuencia de objetos de manera ordenada. Una lista es una estructura referencial, es decir, almacena referencias a los objetos que contiene.

Lista en Python

Recordando, las listas trabajan como arreglos, es decir, tienen un índice desde cero hasta n - 1, donde n es el número total de elementos que contiene.

Python usa los corchetes [ ] como delimitadores para crear una lista, en este caso una lista vacía:

>>> a = []
>>> print(a)
[]

Para almacenar datos en la lista colocamos objetos dentro de los corchetes, por ejemplo, una lista de números enteros:

>>> a = [3, 5, 7, 8, 2] 
>>> print(a)
[3, 5, 7, 8, 2]
>>>
>>> b = ["uno", "dos", "tres "] # una lista de cadenas
>>> print(b)
['uno', 'dos', 'tres ']

El constructor list() también crea una lista vacía, y puede recibir como parámetro cualquier objeto iterable (veremos los objetos iterables más adelante) para formar una lista, por ejemplo list(‘hola’).

>>> a = list('hola')
>>> print(a)
['h', 'o', 'l', 'a']

En Python las listas son más poderosos, nos permiten guardar datos de diferentes tipos, por ejemplo:

>>> a = [12, 32.1, 44j, "Una cadena", True, None, 12.0, [1, 2]]
>>> print(a)
[12, 32.1, 44j, 'Una cadena', True, None, 12.0, [1, 2]]

Podemos observar que las listas también puede contener otras listas.

La clase tuple

La clase tuple es la versión inmutable de una secuencia de objetos, Python usan los paréntesis ( ) como delimitadores para crear una tupla. El constructor tuple() crea una tupla vacía.

>>> a = ()
>>> print(a)
()

Y al igual que las listas, para crear una tupla de objetos solo basta colocarlos entre los paréntesis, solo que existe una restricción, para crear tuplas de un elemento se le debe colocar una coma después del elemento:

>>> a = (17,)
>>> print(a)
(17,)
>>>
>>> a = (17, 3, 5)
>>> print(a)
(17, 3, 5)

La razón de la coma en las tuplas de un elemento es porque sin ella solamente sería una expresión númerica a = (17) y almacenaria un entero.

La clase str

La clase str está diseñada para representar una secuencia inmutable de caracteres, los caracteres se encierran entre comillas dobles "" o simples ''. La elección entre comillas dobles o simples depende de los caracteres a almacenar, usamos comillas dobles para almacenar los siguientes caracteres:

>>> c = "Cadena con comillas dobles, puede contener 'comillas simples'"
>>> print(c)
Cadena con comillas dobles, puede contener 'comillas simples'

O si queremos almacenar con comillas simples debemos escapar la comilla simple que se encuentra en el texto de la siguiente forma:

>>> c = 'Cadena con comillas simples, puede tener "comillas dobles"'
>>> print(c)
Cadena con comillas simples, puede tener "comillas dobles"
>>>
>>> >>> c = 'Don\'t worry'
>>> print(c)
Don't worry

Aquí entra el uso de la antidiagonal \ para escapar caracteres especiales dentro de una cadena. Otros caracteres que se escapan comúnmente son \n para una nueva línea y \t para dar una tabulación en el texto. Python también soporta las triples comillas dobles o simples para textos largos.

>>> c = "\tCadena que inicia con un tabulador"
>>> print(c)
    Cadena que inicia con un tabulador
>>>
>>> x = """Cadena con triples comillas dobles"""
>>> print(x)
Cadena con triples comillas dobles