Python Bytes · Michael Kennedy and Brian Okken

#459: Inverted dependency trees

November 24, 2025·33 min·3 clips
Frozen dicts in Python 3.14 guarantee thread safety by preventing mutable data races.
The episode opens with Black Friday promotions: Michael Kennedy announces three deal tiers at TalkPython including an AI Python bundle featuring courses on agentic AI and LLM building blocks, plus the TalkPython in Production book. Brian Okken offers 50% off the Complete PyTest course using the code 'save50', and notes Pragmatic is also running 50% off including the Python Testing with PyTest book. The first technical topic is PEP 814, proposed by Victor Stinner, which would add a frozen dict as a built-in type in Python. Michael explains that frozen types prevent accidental mutation of shared data and are inherently thread-safe for concurrent reads, which is especially relevant now that Python 3.14 supports true parallelism via the GIL removal. He notes that frozen dict does not inherit from dict, meaning isinstance checks against dict return false. He also surveys existing frozen types in Python including tuple, frozenset, bytes, ranges, memory views, mapping proxy types, and frozen data classes. Brian then covers news that the Material for MkDocs team is placing the project in maintenance mode, committing only to critical bug and security fixes. The team is redirecting effort to a new project called Zensicle, a Rust-based rewrite that is five times faster and aims to be a drop-in replacement for both MkDocs and Material for MkDocs. Zensicle is MIT licensed, open source, and designed for backwards compatibility with existing MkDocs YAML configuration files. The team is also opening up all previously insider-only Material for MkDocs features to the public as part of the transition. Michael covers the Tach tool, which visualizes internal module dependencies within a Python project by parsing imports and generating a layered architecture diagram. He demonstrates it on one of his own projects, showing how view models, services, infrastructure, and database models relate to each other without circular dependencies. He notes that Tach's upstream visualization service, Gauge, may be in question as the company pivots to an AI product, but the parsing component still works and the project is open source. Brian then summarizes two upcoming Python performance efforts: Ken Jin's plan for 5-10% faster free-threaded JIT by Python 3.16, developed at a core dev sprint in Cambridge hosted by Arm, and a separate post noting that decompression in CPython 3.15 will be up to 30% faster due to the addition of zstandard to the standard library. Michael shares a personal use case where he compressed 250KB database text records down to 25KB using XZ compression, illustrating practical value of faster decompression. Henry Schreiner adds context that zstandard is already used by Python Build Standalone, making native support valuable. A listener tip from Bob Belderbus highlights the `uv tree --invert` flag, which reverses the dependency tree to show which packages are pulling in a specific dependency rather than what a package depends on. The episode closes with a joke about GitHub's git operations outage and the paradox of deploying a fix when the deployment mechanism itself is down.

As heard by us

A grounded episode about a faster MkDocs rewrite, compatibility, and the support model behind it.

Episode 459 follows the Rust rewrite of Material for MkDocs and the claim that it is five times faster. It also gets into the practical side: the project stays open source under MIT, and it is meant to keep existing MkDocs YAML files working as-is during the move.

Read the full review in PlayNext →

Why you'd press play

Press play for Python news and headlines with a maintainer-minded angle.

Read the full recommendation in PlayNext →
Listen to the show on