20.07.17 23:17, Jim J. Jewett пише:
Several of the replies seemed to suggest that re-using the current
dict structure for a tuple wouldn't work.  Since I'm not sure whether
people are still thinking of the old structure, or I'm missing
something obvious, I'll be more explicit.

Per https://github.com/python/cpython/blob/master/Include/dictobject.h#L40
the last element of a dict object is now a separate pointer to
ma_values, which is an array of objects.

Per https://github.com/python/cpython/blob/master/Include/tupleobject.h#L27
the last element of a tuple object is also an array of objects.

Is there some reason these arrays cannot be the same memory?  e.g.,
does a tuple header *have* to be contiguous with its data, and if so,
is there a reason that the dict's ma_array can't be allocated with an
extra tuple-header prefix?

Having a tuple header to be contiguous with its data decreases a total size of consumed memory, decreases memory fragmentation, speeds up tuple's creation and item access. Memory consumption and performance of tuples are critically important.

Allocating the dict's ma_values with an extra tuple-header prefix will increase memory consumption for instance dictionaries and will complicate the dict implementation (this can harm the performance). This also will increase a code coupling between dicts and tuples.

Named tuples are rarely used in comparision with ordinary tuples and dictionaries, and they shouldn't be improved at the cost of tuples and dicts.

_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to