There is a quite a lot of redundancy in code, function and generator objects.
Intra-object redundancy
- Code objects have four fields ,
co_nlocalsplus, co_nplaincellvars, co_nlocals, co_nfreevars. Any of these fields can be computed from the other three.
- Code objects have a qualified name and a name. The name is always the suffix of the qualified name. Changing this to qualifying prefix and name would save space and allow sharing.
- The defaults and keyword defaults for a function are separate and the keyword defaults are a dict. They could be combined into a single array.
- Generator objects have a
gi_code field, which is redundant, as the frame contains a reference to the code object.
Inter-object redundancy
- Functions and generators have qualified name and name fields, which are almost always the same as the underlying code object. These should be lazily initialized
Linked PRs