// HEISE ONLINE — SALUTE
Python 3.15 erschienen: Faule Importe, UTF-8 und neue Datentypen
Python 3.15 soll manche Programme schneller starten lassen und vereinfacht den Umgang mit unveränderlichen Daten. UTF-8 als Standard erfordert Tests.
This article is also available in
English.
It was translated with technical assistance and editorially reviewed before publication.
Python 3.15.0 ist verfügbar. Die neue Hauptversion der Programmiersprache erschien am 9. Oktober 2026 und bringt Änderungen an der Sprache, am Referenzinterpreter CPython und an der Standardbibliothek. Zu den auffälligsten Neuerungen gehören explizit verzögerte Imports (Lazy Imports) sowie die eingebauten Typen frozendict und sentinel. Hinzu kommen Fortschritte beim experimentellen Just-in-time-Compiler.
Laut Release Notes von Python 3.15.0 flossen 5643 Commits von 1012 Mitwirkenden in die Version ein. Die Freigabe verzögerte sich um eine Woche. Am 2. Oktober schob Release-Manager Hugo van Kemenade einen dritten Release Candidate nach, weil kurz vor Schluss bei den Lazy Imports noch Fehler aufgetaucht waren, die eine Freigabe blockierten.
Ein Import lädt ein Modul und führt dabei dessen Code aus. Bei umfangreichen Abhängigkeiten kann das schon die Hilfeausgabe eines Kommandozeilenprogramms verzögern.
Python 3.15 ergänzt dafür das weiche Schlüsselwort lazy. Weich heißt: Es hat nur vor einer Importanweisung eine besondere Bedeutung und bleibt sonst als Name verwendbar. Ein so gekennzeichneter Import verschiebt das Laden bis zur ersten Verwendung des importierten Namens. Ein vereinfachtes Beispiel für ein Werkzeug mit optionaler JSON-Ausgabe:
Ohne die Option --json benötigt dieses Programm das Modul json nicht. Erst beim Zugriff auf json.dumps wird der verzögerte Import aufgelöst. In einer eigenen Messung brauchte ein Skript, das 13 Module der Standardbibliothek importiert und dann nur eine Zeile ausgibt, auf einem Apple M4 mit gewöhnlichen Imports im Median 44 Millisekunden. Mit lazy waren es 11, kaum mehr als bei einem Skript ganz ohne Imports.
lazy ist nur auf Modulebene erlaubt, also auf der obersten Ebene einer Datei, nicht in Funktionen, Klassen oder try-Blöcken, und nicht für import *. Wer bestehenden Code ohne Umschreiben testen will, kann mit der Umgebungsvariablen PYTHON_LAZY_IMPORTS=all nahezu alle Imports auf Modulebene verzögern.
Das Verfahren verändert allerdings den Zeitpunkt von Seiteneffekten und Fehlern. Ein fehlendes Modul fällt erst beim ersten Zugriff auf.
Ein Wörterbuch (dict) ordnet Schlüsseln Werte zu. Mit frozendict gibt es davon nun eine unveränderliche Variante. Einträge lassen sich nach der Erstellung weder hinzufügen noch entfernen oder ersetzen. Das schützt etwa gemeinsam verwendete Konfigurationen vor versehentlichen Änderungen: