Python 3.15 ya está aquí: menos tiempo de arranque, mejor profiling
Un script que importa 13 módulos de la librería estándar y solo imprime una línea pasó de tardar una mediana de 44 milisegundos a 11 milisegundos en un Apple M4 al activar los lazy imports, según midió heise. Ese salto es la razón por la que Python 3.15 importa a cualquier founder que tenga una CLI, un worker o un servicio que arranca en frío.
La versión estable se publicó el 9 de octubre de 2026, según reportó heise, e incluye 5.643 commits de 1.012 contribuyentes, de acuerdo con las notas de release citadas por el mismo medio. El lanzamiento se retrasó una semana: el release manager Hugo van Kemenade tuvo que empujar un tercer release candidate el 2 de octubre porque aparecieron errores en los lazy imports que bloqueaban la salida.
Para quien escribe código que debe funcionar en todas las versiones soportadas, el otro titular es igual de importante: Python 3.10 quedó oficialmente sin soporte, así que ya se puede empezar a usar lo que llegó en 3.11.
¿Y esto cómo se aplica en tu negocio?
En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.
👥 Probar 7 días¿Qué son los lazy imports de PEP 810 y por qué cambian el arranque?
La sintaxis es nueva y explícita:
lazy import json
lazy from pathlib import Path
El módulo se carga recién la primera vez que se usa uno de esos símbolos. Detrás hay objetos proxy que se resuelven (se «reifican») cuando hacen falta, según explicó LWN.net al analizar el PEP 810.
El caso de uso real es concreto: herramientas con sistema de plugins. Si un plugin instala dependencias pesadas como sentence_transformers, cada invocación del comando paga ese costo de import aunque el usuario no use esa función. Los lazy imports mueven ese costo al momento en que realmente se necesita.
Hay límites que conviene conocer antes de refactorizar:
- Solo se permiten a nivel de módulo, no dentro de funciones, clases o bloques
try. - No aplican a
from modulo import *. - Cambian el momento en que aparecen los efectos secundarios y los errores: un módulo faltante se detecta en el primer acceso, no al arrancar.
- Se pueden desactivar con
PYTHON_LAZY_IMPORTSo con el flag-X lazy_imports=none, aunque LWN.net documenta que ese flag generó debate en la comunidad por romper dependencias circulares y porquepipno debería usarlo.
Tachyon: un profiler de muestreo dentro de la librería estándar
El profiler histórico cambió de nombre: cProfile ahora es profiling.tracing y sigue disponible. A su lado aparece Tachyon (profiling.sampling), un profiler estadístico que toma muestras del stack 1.000 veces por segundo, según heise.
La diferencia práctica es el overhead. Un profiler de tracing registra cada llamada y frena el programa; el de muestreo es mucho más liviano y puede engancharse a un proceso que ya está corriendo, sin reiniciarlo ni instrumentarlo:
sudo python3.15 -m profiling.sampling attach 12345
Genera reportes, flame graphs en HTML e incluso un formato que se puede abrir en el profiler de Firefox. La contra: las funciones muy cortas pueden caer entre dos muestras y pasar desapercibidas, así que para conteos exactos de llamadas conviene seguir con el profiler de tracing.
¿Python 3.15 es más rápido que 3.14? La respuesta corta es «casi igual»
Miguel Grinberg comparó la 3.15.0rc3 contra la 3.14 y encontró un rendimiento prácticamente idéntico, con una excepción: el JIT experimental dio un 1,2x de mejora sobre el intérprete estándar en una prueba de Fibonacci, la primera vez que observó un aumento de performance significativo del JIT.
Los números oficiales que cita heise apuntan en la misma dirección: 7-8% de mejora geométrica sobre el intérprete estándar en x86-64 Linux y 11-12% sobre el intérprete tail-calling en AArch64 macOS. InfoWorld reporta un rango de 8% a 13% según plataforma y carga de trabajo. Son comparaciones entre configuraciones con y sin JIT, no una aceleración general frente a 3.14: en benchmarks individuales el rango va de un 15% más lento a más del doble de rápido.
Hay un dato aparte que sí beneficia a todos en Windows: los binarios oficiales de 64 bits ahora usan el intérprete tail-calling, y el equipo de Python mide 15-20% más de velocidad en pyperformance frente al intérprete anterior, según heise.
Otras novedades que vale la pena mirar
- frozendict: un diccionario inmutable y hasheable, útil para configuraciones compartidas entre hilos sin locks y como argumento de
functools.lru_cache. - sentinel(): reemplaza el patrón de crear marcadores con
object()para distinguir «no se pasó el argumento» de «se pasó None». - UTF-8 por defecto: el cambio con más impacto silencioso, sobre todo en Windows. Los archivos viejos no se re-codifican solos, así que hay que testear con datos reales y no solo con ASCII.
- Unpacking en comprehensions:
[*batch for batch in batches]aplana listas sin el doble loop. - Vuelta atrás en el recolector de basura: 3.15 revierte el recolector incremental de 3.14 y vuelve al generacional, después de que muchos usuarios reportaran un aumento fuerte en el uso de memoria, según InfoWorld.
- Soporte hasta ~octubre de 2031, con releases de corrección mensuales durante dos años y tres años más de parches de seguridad, según heise.
¿Qué significa esto para tu startup?
Si tienes un producto en producción, la decisión no es «actualizo o no actualizo», sino cuándo y con qué evidencia. Estas son las acciones concretas que puedes ejecutar esta semana:
- Mide tu tiempo de arranque antes de tocar nada. Cronometra el comando o el cold start de tu servicio con la versión actual. Si tu CLI tarda cientos de milisegundos solo en importar, los lazy imports son la mejora con mejor relación esfuerzo/beneficio, y puedes probarla sin reescribir código usando la variable de entorno que fuerza imports diferidos.
- Usa Tachyon para encontrar el cuello de botella real. Antes de optimizar a ciegas, engancha el profiler de muestreo a un proceso en producción o staging y mira dónde se va el tiempo. Es gratis, viene en la stdlib y no requiere instrumentar nada.
- Actualiza con uv en un entorno aislado. El flujo es
uv self update, luegouv python install 3.15yuv python pin --global 3.15. Para las herramientas ya instaladas,uv tool upgrade <herramienta> --python 3.15las reinstala con la versión nueva. - Prueba con datos reales, no con fixtures ASCII. El cambio a UTF-8 por defecto es el que más rompe cosas en silencio. Corre tus tests de import/export con archivos que tengan acentos y caracteres no latinos.
- Ojo si desarrollas en Mac. heise advierte que en macOS 27.0 las aplicaciones con interfaz Tkinter (incluido IDLE) pueden colgarse al abrir diálogos desde el menú. El problema es del sistema operativo y afecta a todas las versiones actuales de Python que usan Tk.
El mensaje de fondo para un equipo chico es que Python está resolviendo problemas que antes obligaban a sumar dependencias externas: profiling de producción, imports diferidos y estructuras inmutables ya no requieren librerías de terceros. Menos dependencias es menos superficie de mantenimiento.
Fuentes
- Hello Python 3.15, goodbye 3.10, and now I can use 3.11 (fuente original)
- Python 3.15 released: Lazy imports, UTF-8 and new data types
- The best new features in Python 3.15
- Disabling Python’s lazy imports from the command line
- Python 3.15.0 Officially Released: A Summary of Official Announcements
¿Y esto cómo se aplica en tu negocio?
En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.
👥 Probar 7 días













