Tipos de datos en Python: guía completa

Publicado el: 11/07/2026
Tempo de leitura: 4 minutos
Pessoa pensando com um monitor desfocado ao fundo

Los tipos de datos determinan qué representa un valor y qué operaciones pueden realizarse con él. Python identifica el tipo automáticamente, pero el programador sigue siendo responsable de elegir una estructura adecuada. Un número, un texto, una lista de productos y un registro de usuario tienen necesidades distintas. Comprender estas diferencias evita conversiones innecesarias, errores de lógica y estructuras difíciles de mantener.

Esta guía se relaciona con los artículos sobre strings, listas, diccionarios, sets y tuplas.

La documentación oficial de tipos integrados describe el comportamiento de números, secuencias, conjuntos y mappings. El tutorial oficial de estructuras de datos ofrece ejemplos prácticos de listas, diccionarios y sets.

Consultar el tipo de un valor

edad = 30
nombre = "Lucía"
activo = True

print(type(edad))
print(type(nombre))
print(type(activo))

type() muestra la clase exacta. Para comprobar compatibilidad, especialmente con herencia, suele ser mejor isinstance:

if isinstance(edad, int):
    print("Es un entero")

Enteros: int

int representa números enteros positivos, negativos o cero. Python admite enteros muy grandes sin un límite fijo pequeño:

usuarios = 1250
saldo = -40
potencia = 2 ** 100

Las operaciones más comunes son suma, resta, multiplicación, división entera, resto y potencia:

a = 17
b = 5

print(a + b)   # 22
print(a // b)  # 3
print(a % b)   # 2
print(a ** b)  # 1419857

Decimales: float

float representa números de punto flotante:

temperatura = 22.5
porcentaje = 0.18

No todos los decimales pueden representarse exactamente en formato binario:

print(0.1 + 0.2)
# 0.30000000000000004

Para comparar resultados calculados utiliza math.isclose. Para dinero o reglas decimales exactas, considera Decimal.

Booleanos: bool

bool tiene dos valores: True y False. Se utiliza para decisiones:

tiene_permiso = True

if tiene_permiso:
    print("Acceso permitido")

Muchos valores tienen una interpretación booleana. Cero, cadenas vacías, listas vacías y None son falsos. No confundas una cadena "False" con el booleano False: toda cadena no vacía se considera verdadera.

Texto: str

str representa texto Unicode:

mensaje = "Python es legible"
print(mensaje.upper())
print(mensaje.split())
print(mensaje.replace("legible", "práctico"))

Las strings son inmutables. Los métodos devuelven nuevos valores:

nombre = " ana "
limpio = nombre.strip().title()

Listas: list

Una lista es ordenada, mutable y permite valores repetidos:

tareas = ["estudiar", "probar", "documentar"]
tareas.append("publicar")
tareas[0] = "repasar"

Es apropiada cuando el orden importa y la colección puede cambiar. Aunque Python permite mezclar tipos, una lista homogénea suele ser más fácil de procesar.

Tuplas: tuple

Una tupla es ordenada e inmutable:

coordenada = (10, 25)
x, y = coordenada

Resulta útil para registros pequeños que no deben cambiar, coordenadas, claves compuestas y retornos múltiples. La inmutabilidad no significa que todos los objetos contenidos sean inmutables; una tupla puede contener una lista modificable.

Conjuntos: set

Un set almacena valores únicos y permite búsquedas rápidas:

etiquetas = {"python", "web", "python"}
print(etiquetas)
# {'python', 'web'}

También facilita operaciones matemáticas:

a = {1, 2, 3}
b = {3, 4, 5}

print(a | b)  # unión
print(a & b)  # intersección
print(a - b)  # diferencia

No dependas del orden visual de un set. Para un conjunto inmutable utiliza frozenset.

Diccionarios: dict

Un diccionario relaciona claves únicas con valores:

usuario = {
    "nombre": "Ana",
    "edad": 28,
    "activo": True,
}

print(usuario["nombre"])
print(usuario.get("telefono", "No disponible"))

Es ideal para registros, configuraciones, índices y respuestas JSON. Las claves deben ser hashables, como strings, números o tuplas inmutables.

El valor None

None representa ausencia de valor:

resultado = None

if resultado is None:
    print("Todavía no hay resultado")

Compáralo con is None, no con == None. Distingue entre ausencia, cero, cadena vacía y lista vacía, porque pueden tener significados diferentes.

Rangos: range

range representa una secuencia de enteros sin crear una lista completa:

for numero in range(1, 6):
    print(numero)

Es eficiente para bucles y admite inicio, límite y paso. El límite final no se incluye.

Bytes y bytearray

bytes representa datos binarios inmutables. bytearray es mutable:

texto = "café"
datos = texto.encode("utf-8")
recuperado = datos.decode("utf-8")

Se usan en archivos binarios, redes, imágenes y criptografía. No intentes mezclar bytes y strings sin codificar o decodificar explícitamente.

Tipos mutables e inmutables

Los enteros, floats, booleanos, strings, bytes, tuplas y frozensets son inmutables. Las listas, diccionarios, sets y bytearrays son mutables. Esta diferencia afecta asignaciones y funciones:

lista_a = [1, 2]
lista_b = lista_a
lista_b.append(3)
print(lista_a)  # [1, 2, 3]

Ambas variables apuntan al mismo objeto. Para una copia superficial usa lista_a.copy(). Para estructuras anidadas puede ser necesario copy.deepcopy.

Convertir tipos

edad = int("30")
precio = float("19.90")
texto = str(123)
valores = list((1, 2, 3))
unicos = set([1, 1, 2])

Las conversiones pueden fallar:

try:
    cantidad = int(input("Cantidad: "))
except ValueError:
    print("Debes introducir un entero")

Elegir la estructura correcta

Usa una lista para una secuencia modificable, una tupla para un grupo fijo, un set para unicidad y pertenencia, y un diccionario para asociaciones clave-valor. No elijas solo por costumbre. Pregunta si el orden importa, si debe haber duplicados, cómo se busca la información y si los valores cambiarán.

Anotaciones de tipo

def promedio(valores: list[float]) -> float:
    if not valores:
        raise ValueError("La lista está vacía")
    return sum(valores) / len(valores)

Las anotaciones no impiden automáticamente pasar otro tipo durante la ejecución, pero mejoran el editor, la documentación y el análisis estático.

Errores frecuentes

Los fallos habituales incluyen sumar strings con números, modificar una colección mientras se recorre, usar una lista como clave de diccionario, esperar orden en un set, comparar floats con igualdad exacta y crear copias superficiales de estructuras anidadas. También es común convertir un valor demasiado pronto y perder información.

Ejemplo práctico

productos = [
    {"id": 1, "nombre": "Teclado", "precio": 50.0},
    {"id": 2, "nombre": "Ratón", "precio": 20.0},
]

ids = {producto["id"] for producto in productos}
precios = [producto["precio"] for producto in productos]
resumen = (len(productos), sum(precios))

print(ids)
print(resumen)

Cada estructura cumple una función: lista para los registros ordenados, diccionarios para cada producto, set para identificadores únicos y tupla para un resumen fijo.

Conclusión

Los tipos de datos son la base de cualquier programa Python. Comprender números, booleanos, strings, listas, tuplas, sets, diccionarios, None y bytes permite representar cada problema de forma clara. Presta atención a mutabilidad, conversiones y precisión. Elegir bien la estructura simplifica los algoritmos y reduce errores antes de escribir código más avanzado.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Contenido del artículo

    Artículos relacionados

    Como usar f-strings para formatar números e moedas em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Cómo formatear números y monedas con f-strings

    Aprende a formatear números, monedas, porcentajes, miles y columnas con f-strings, Decimal y reglas seguras de internacionalización.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Pattern matching com match case em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    match-case en Python: guía de pattern matching

    Aprende match-case en Python: patrones con valores, listas, diccionarios, dataclasses, guards, capturas, constantes y ejemplos prácticos.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026
    Uso de map e filter para agilizar código Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    map() y filter() en Python: guía práctica y eficiente

    Aprende map() y filter() en Python: transformación, filtrado, evaluación perezosa, pipelines, lambdas, errores y comparación con comprehensions.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Comparação entre list comprehension e generator expression em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    List comprehension vs generator expression en Python

    Compara list comprehension y generator expression en Python: memoria, evaluación perezosa, rendimiento, reutilización y casos prácticos.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Logo do Python com as palavras global e local
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Alcance de variables en Python: entiende la regla LEGB

    Entiende el alcance de variables en Python con la regla LEGB, global, nonlocal, closures, sombreado, mutabilidad y UnboundLocalError.

    Ler mais

    Tempo de leitura: 5 minutos
    11/07/2026
    Operações matemáticas usando o módulo math em Python
    Fundamentos
    Foto de perfil de Leandro Hirt da Academify

    Módulo math en Python: operaciones matemáticas esenciales

    Aprende el módulo math en Python: raíces, potencias, redondeos, trigonometría, logaritmos, constantes, isclose y ejemplos prácticos.

    Ler mais

    Tempo de leitura: 4 minutos
    11/07/2026