У меня возник спор с преподавателем. Он говорит, что list в Python - это список.
Я говорю, что это не так хотя бы потому, что есть функция взятия элемента по индексу. Он сказал, что оператор [] можно перегрузить (он сам в этом не уверен). Действительно, можно. Тогда я сказал ему, что элементы list() хранятся в памяти последовательно (за счет чего и есть доступ по индексу), но на это он послал меня разбираться в устройстве памяти Python, аргументировав это тем, что будь это массив, все элементы были бы однотипны (вполне логично).
В коде Python я нашел следующую структуру.
typedef struct {
PyObject_VAR_HEAD
PyObject **ob_item;
Py_ssize_t allocated;
} PyListObject;
Как видно из кода, ob_item - динамический массив указателей на хранимые объекты, аllocated - кол-во выделенной памяти.
Правильно ли я понимаю, что
list
в памяти представляется именно этой структурой?
Могу ли я на основании представления данной структуры утверждать что элементы
list
лежат в памяти последовательно?
Могу ли я сделать вывод, что list все же обычный динамический массив, объекты которого имеют тип PyObject, а в полях PyObject уже определяется тип конкретного хранимого объекта?