gh-99845: Change _PyDict_KeysSize() return type to size_t by vstinner · Pull Request #99848 · python/cpython
- Change _PyDict_KeysSize() and shared_keys_usable_size() return type from signed (Py_ssize_t) to unsigned (size_t) type.
- new_values() argument type is now unsigned (size_t).
- init_inline_values() now uses size_t rather than int for the 'i' iterator variable.
- type.sizeof() implementation now uses unsigned (size_t) type.
* Change _PyDict_KeysSize() and shared_keys_usable_size() return type from signed (Py_ssize_t) to unsigned (size_t) type. * new_values() argument type is now unsigned (size_t). * init_inline_values() now uses size_t rather than int for the 'i' iterator variable. * type.__sizeof__() implementation now uses unsigned (size_t) type.
I would prefer to change _PyDict_SizeOf() return type to size_t, but it's not required to fix issue #99845, and it can impact the 3rd party frozendict project which uses it.
I would prefer to change _PyDict_SizeOf() return type to size_t, but it's not required to fix issue #99845, and it can impact the 3rd party frozendict project which uses it.
Another more radical change is to move the private function to internal C API, and frozendict should call dict.__sizeof__() method instead.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The patch looks good to me.
Is Py_ssize_t recommended for container size and size_t recommended for memory size for now?
I was confused by assert(size > 0); is new_values(). I read it as assert(size >= 0);, to reject negative values. So I replaced it with: assert(size >= 1); which is less confusing for me :-)