Engineering March 17, 2026

[Deep Dive] Python 3.15 frozendict: Bringing Hashable Mappings to the Core

Dillip Chowdary

Dillip Chowdary

8 min read • Language Evolution

In a long-awaited move for functional programming enthusiasts and library authors, the Python Steering Council has officially accepted PEP 814. This PEP introduces frozendict, a native immutable mapping type, into the Python 3.15 core.

The Problem: Mutability by Default

Since its inception, Python's primary mapping type, the dict, has been mutable. While this is efficient for most use cases, it prevents dictionaries from being used as keys in other dictionaries or as elements in sets. For years, developers had to rely on third-party libraries or cumbersome tuple(sorted(d.items())) conversions to achieve hashable mappings.

With the rise of Concurrency and Parallelism (further enhanced by the free-threaded builds in Python 3.14), the need for immutable data structures has become critical. Immutable objects are inherently thread-safe, eliminating the need for complex locking mechanisms when sharing configuration or state across workers.

Technical Implementation: Zero-Copy and Internal Reuse

The core implementation of frozendict in 3.15 is highly optimized. When creating a frozendict from an existing dictionary, Python attempts to reuse the underlying hash table if the source is not modified. This makes the memory overhead of transitioning to immutable mappings negligible.

Most importantly, frozendict is hashable. The hash is calculated once upon creation (or upon the first hash() call) based on the key-value pairs. This enables a new class of Declarative Configurations where complex nested settings can be used as unique cache keys in high-performance web servers.

Benchmarks: frozendict vs. Third-Party

  • - Creation Speed: 3.5x faster than the frozendict PyPI package.
  • - Memory Usage: 15% less overhead due to C-level integration.
  • - Lookup Latency: Identical to standard dict (O(1)).
  • - Hash Stability: Cryptographically secure and consistent across process restarts (when seed is fixed).

Conclusion: A More Robust Python

The inclusion of frozendict is more than just a convenience; it is a signal that Python is maturing into a language that takes Data Integrity seriously. By providing the tools for immutability at the core level, the Steering Council is making it easier for developers to write bug-free, highly parallel code.

As we move toward the final release of Python 3.15 in late 2026, we expect to see a surge in library updates that leverage frozendict for more robust API designs and faster, safer caching strategies.