classification
Title: docs: struct: clarify struct caching behaviour
Type: enhancement Stage: patch review
Components: Documentation Versions: Python 3.10, Python 3.9, Python 3.8, Python 3.7
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: docs@python Nosy List: docs@python, python-dev, uniq10
Priority: normal Keywords: patch

Created on 2021-01-06 09:05 by uniq10, last changed 2021-01-08 06:05 by python-dev.

Pull Requests
URL Status Linked Edit
PR 24164 open python-dev, 2021-01-08 06:05
Messages (1)
msg384476 - (view) Author: Sandeep Subramanian (uniq10) * Date: 2021-01-06 09:05
As per docs in :https://docs.python.org/3.7/library/struct.html#struct.Struct

> The compiled versions of the most recent format strings passed to Struct and the module-level functions are cached, so programs that use only a few format strings needn’t worry about reusing a single Struct instance.

This statement seems to imply that the format string passed as `struct.Struct(format)` is also cached. This doesn't appear to be the case.

Only format strings passed to the module level functions seems to be cached.

`cache_struct_converter` at https://github.com/python/cpython/blob/v3.7.7/Modules/_struct.c#L2052 
appears to be used only in the top module level functions `pack` and `pack_into` and is *not* used in `Struct.__init__`.


Would it be better to change the doc to:

> The compiled versions of the most recent format strings passed to the module-level functions are cached, so programs that use only a few format strings needn’t worry about reusing a single Struct instance.

This issue was introduced by https://github.com/python/cpython/commit/3666b3c1f695a145adab1bf644c22e564e8eb0ee

and is present in every version since.

Refs:
https://github.com/python/cpython/pull/7700
https://bugs.python.org/issue33032
History
Date User Action Args
2021-01-08 06:05:25python-devsetkeywords: + patch
nosy: + python-dev

pull_requests: + pull_request22992
stage: patch review
2021-01-06 09:05:31uniq10create