Python Monthly News

Python Gains frozendict and Other Python News for March 2026

by Philipp Acsany Publication date Mar 09, 2026 Reading time estimate 12m community news

After years of community requests, Python is finally getting frozendict. The Steering Council accepted PEP 814 in February, bringing an immutable, hashable dictionary as a built-in type in Python 3.15. It’s one of those additions that feels overdue, and the frozenset-to-set analogy makes it immediately intuitive. This is just one piece of a busy month of Python news.

Beyond that, February brought security patches, AI SDK updates, and some satisfying infrastructure improvements under Python’s hood. Time to dive into the biggest Python news from the past month!

Python Releases and PEP Highlights

The Steering Council was active in February, with several PEP decisions landing. On the release side, both the 3.14 and 3.13 branches got maintenance updates.

Python 3.15.0 Alpha 6: Comprehension Unpacking and More

Python 3.15.0a6 shipped on February 11, continuing the alpha series toward the May 5 beta freeze. This release includes several accepted PEPs that are now testable:

PEP 798 is the kind of quality-of-life improvement that makes you smile. It lets you flatten or merge collections directly in a comprehension:

Python
>>> lists = [[1, 2], [3, 4], [5]]
>>> [*it for it in lists]
[1, 2, 3, 4, 5]

>>> dicts = [{"a": 1}, {"b": 2}]
>>> {**d for d in dicts}
{'a': 1, 'b': 2}

No more writing explicit loops just to concatenate a list of lists.

The JIT compiler continues to show gains: 3-4% on x86-64 Linux over the standard interpreter and 7-8% on AArch64 macOS over the tail-calling interpreter, matching the numbers from alpha 5.

Python 3.14.3 and 3.13.12: Maintenance Releases

On February 3, the team shipped Python 3.14.3 with around 300 bug fixes and Python 3.13.12 with about 240 fixes. No new features here, but if you’re running either version in production, it’s worth grabbing these patches to stay current.

PEP 814 Accepted: frozendict Joins the Built-Ins

This one has been on many Python developers’ wishlists for over a decade. PEP 814, authored by Victor Stinner and Donghee Na, adds frozendict as a built-in immutable dictionary type in Python 3.15.

The concept is straightforward. Just as frozenset gives you an immutable version of set, frozendict gives you an immutable version of dict:

Python
>>> config = frozendict(host="localhost", port=8080)
>>> config["host"]
'localhost'

>>> config["host"] = "0.0.0.0"
Traceback (most recent call last):
    ...
TypeError: 'frozendict' object does not support item assignment

Because frozendict instances are immutable, they’re hashable when all their keys and values are hashable. That means you can use them as dictionary keys, store them in sets, or pass them to @functools.lru_cache()-decorated functions:

Python
>>> permissions = {
...     frozendict(role="admin"): ["read", "write", "delete"],
...     frozendict(role="viewer"): ["read"],
... }

The new type supports union operators (| and |=), type annotations via frozendict[str, int], and equality comparison with regular dicts. Notably, frozendict does not inherit from dict, which keeps the immutability guarantees clean and avoids any accidental mutation through inherited methods.

Other PEP Updates

Beyond frozendict, the Steering Council made a couple more PEP decisions in February:

  • PEP 815 Final – Deprecate RECORD.jws and RECORD.p7s: This cleans up wheel signature formats that no major packaging tool actually supports. Going forward, the recommendation is to rely on index-hosted attestations like those on PyPI.

  • PEP 743 Rejected – Py_OMIT_LEGACY_API: The Council turned down a proposal to let C extension authors opt out of deprecated C API functions via a preprocessor macro, citing concerns about granularity and developer experience. They suggested better linter tooling as the more effective path.

Community and Ecosystem Highlights

Sometimes the most satisfying improvements are the ones lurking deep in Python’s internals. This month brought a fix that was literally 15 years in the making.

Ending 15 Years of subprocess Polling

One of the month’s most satisfying reads was Giampaolo Rodola’s blog post on ending 15 years of subprocess polling. Since Python 3.3, the subprocess module has used busy-loop polling to check whether a child process has finished. It repeatedly calls waitpid(WNOHANG), sleeps, then checks again with exponential backoff from 0.1ms to 40ms.

Modern operating systems have proper event-driven mechanisms for this. Python 3.15 will now use pidfd_open() on Linux and kqueue() on macOS to get notified when processes exit, dropping context switches from 258 to just 2 in benchmarks. Rodola first implemented the approach in psutil, then upstreamed matching improvements to CPython. If you’ve ever wondered why subprocess.run() seemed to add unnecessary latency, this is your answer.

Dispatch From the Inaugural PyPI Support Specialist

Maria Ashna shared a candid look at her year and a half as PyPI’s first Support Specialist. When she started in July 2024, account recovery requests were four months behind, and PEP 541 (package name claims) had a 16-month backlog. She cleared both queues to current status, processing nearly 3,000 account recovery issues and approving over 8,000 PyPI Organizations applications.

It’s a great behind-the-scenes look at the human infrastructure that keeps the Python packaging ecosystem running.

MicroPythonOS: An Android-Like Experience on Microcontrollers

Following up on the MicroPython-in-a-PlayStation-game story from December, MicroPythonOS is a lightweight graphical operating system for microcontrollers like the ESP32. It delivers an Android-like user interface experience, complete with touch input and app-style navigation, all powered by MicroPython. If you’re into embedded development, you’ll want to check it out.

Library and Tooling Updates

Django shipped an unusually heavy round of security patches, and uv hit its second breaking-changes release. Both updates affect workflows that many Python developers rely on daily, so they’re important to review.

Django Security Releases: Three SQL Injection Fixes

The Django team shipped security releases on February 3 for Django 6.0.2, 5.2.11, and 4.2.28, addressing six vulnerabilities including three high-severity SQL injection bugs affecting:

Two moderate denial-of-service issues and a low-severity timing attack in the mod_wsgi authentication handler were also patched. If you run Django in production, you’ll want to upgrade immediately. Three high-severity SQL injections in a single release are unusual and worth taking seriously.

uv 0.10.0: Breaking Changes and Stabilized Features

uv 0.10.0 landed on February 5 as a breaking-changes batch release. The biggest stabilized feature is uv python upgrade for seamless patch-version upgrades in virtual environments, along with uv workspace list and uv add --bounds.

Here are notable breaking changes to watch for:

  • uv venv now requires --clear to remove an existing environment.
  • PyPy and GraalPy executables install under their implementation name—for example, pypy3.10 instead of python3.10.
  • uv format upgraded to Ruff 0.15.0 with the 2026 style guide.
  • Python 3.8 Docker images are discontinued.

AI Tooling Updates

The AI Python SDK landscape moved fast this month, with both OpenAI and Anthropic racing to add WebSocket-based real-time transports to their SDKs. Here’s what matters for Python developers.

Anthropic: Structured Outputs GA and MCP Helpers

Anthropic’s Python SDK shipped four releases in February (v0.81.0–v0.84.0). Highlights include structured outputs, now generally available for Claude Sonnet 4.5, Opus 4.5, and Haiku 4.5, dropping the beta header requirement. The web search tool and fine-grained tool streaming are also GA.

The most practical addition for developers building MCP integrations is v0.84.0’s new helpers for converting MCP tools, prompts, and resources directly to Anthropic API types. If you’ve been manually wrangling tool schemas between MCP and Claude, this should save you some boilerplate.

OpenAI: WebSocket Transport and the Assistants Sunset

The openai-python SDK shipped eight releases in February (v2.17.0–v2.24.0). The headline is WebSocket transport for the Responses API (v2.22.0), enabling persistent, low-latency connections across multi-turn agent workflows.

More significantly, OpenAI announced plans to sunset the Assistants API in 2026 after achieving feature parity in the Responses API. If you’ve built applications on the Assistants API, it’s time to start planning your migration. The Agents SDK also dropped Python 3.9 support.

vLLM 0.16.0: Self-Hosted Realtime API

vLLM 0.16.0 is the largest vLLM release to date, with 440 commits from 203 contributors. The standout feature is a WebSocket-based Realtime API that mirrors OpenAI’s interface, making vLLM a drop-in self-hosted alternative for voice-enabled applications. Async scheduling with pipeline parallelism resulted in a 30.8% end-to-end throughput improvement.

Open-Source AI at Wagtail

On the community side, Thibaud Colas from the Wagtail CMS team published a thoughtful post on open-source AI tools they use for development. The post covers their experience with models like Qwen3 Coder and Mistral Small through providers like Ollama and LM Studio.

The central argument frames open-source model adoption as moving from “renting” to “owning” AI capabilities. If you’re evaluating AI coding tools for your own workflow, it’s a practical starting point.

Conferences and Events

A couple of Python conferences have CFP deadlines approaching:

If you haven’t already, PyCon US 2026 registration is open for May 13-19 in Long Beach, California. The schedule and tutorial registration will be published later this spring.

Real Python Roundup

The Real Python team kept up the pace in February with new tutorials, video courses, quizzes, and podcast episodes. Here’s what’s new.

Check out these new written tutorials to level up your Python skills:

If you prefer watching over reading, these new video courses have you covered:

Test your understanding with these new quizzes:

On The Real Python Podcast, host Christopher Bailey published four new episodes this month:

If you’ve ever wondered what goes into every tutorial, course, and quiz on the site, check out the Real Python Editorial Guidelines. It walks through the multi-stage review process, from technical accuracy checks by subject-matter experts to language editing by professional editors, and explains how editorial independence is maintained.

What’s Next for Python?

  • Python 3.15.0a7 is scheduled for March 10, with the beta freeze on May 5. The frozendict implementation and comprehension unpacking syntax will land before then.
  • PyCon US 2026 will take place May 13-19 in Long Beach, California. Registration is open, and the schedule will be announced this spring.
  • If you’re running Django in production, make sure you’ve applied the February security patches. Three high-severity SQL injections aren’t something to sit on.

That’s a wrap for this month. With frozendict, comprehension unpacking, and the end of subprocess polling, Python 3.15 is shaping up to be one of those releases where everyday code just gets a little more enjoyable to write. If any of these features catch your eye, grab an alpha build and try them out. Happy Pythoning!

🐍 Python Tricks 💌

Get a short & sweet Python Trick delivered to your inbox every couple of days. No spam ever. Unsubscribe any time. Curated by the Real Python team.

Python Tricks Dictionary Merge

About Philipp Acsany

Philipp is a core member of the Real Python team. He creates tutorials, records video courses, and hosts Office Hours sessions to support your journey to becoming a skilled and fulfilled Python developer.

» More about Philipp

Each tutorial at Real Python is created by a team of developers so that it meets our high quality standards. The team members who worked on this tutorial are:

Master Real-World Python Skills With Unlimited Access to Real Python

Locked learning resources

Join us and get access to thousands of tutorials, hands-on video courses, and a community of expert Pythonistas:

Level Up Your Python Skills »

Master Real-World Python Skills
With Unlimited Access to Real Python

Locked learning resources

Join us and get access to thousands of tutorials, hands-on video courses, and a community of expert Pythonistas:

Level Up Your Python Skills »

What Do You Think?

Rate this article:

What’s your #1 takeaway or favorite thing you learned? How are you going to put your newfound skills to use? Leave a comment below and let us know.

Commenting Tips: The most useful comments are those written with the goal of learning from or helping out other students. Get tips for asking good questions and get answers to common questions in our support portal.


Looking for a real-time conversation? Visit the Real Python Community Chat or join the next “Office Hours” Live Q&A Session. Happy Pythoning!

Keep Learning

Related Topics: community news