PEP 603: Adding a frozenmap type to collections

Inspired by Add zero-copy conversion of `bytearray` to `bytes` by providing `__bytes__()` - #18 by storchaka, what I would love to have is a zero-copy dict.freeze method that constructs in O(1) time a frozendict instance, a hashable, picklable and immutable object that shares the same hash table with the original dict. This allows a dict to be efficiently made “gold” after it’s iteratively built.

And then one of the following two things can happen after dict.freeze:

  1. The original dict gets cleared by getting a new allocation of an empty hash table if its reference count is 1. Make a copy if the reference count isn’t 1.
  2. The original dict keeps a pointer to the frozendict such that if the dict ever gets mutated (via either Python or C API), the frozendict would then make a copy of the hash table and detaches.

To me option 1 would be good enough for my use cases, while option 2 offers more flexibility at the cost of an extra pointer per dict.

1 Like