Как Python удается перебирать значения в словаре? - PullRequest
0 голосов
/ 13 мая 2019

Я хочу знать, как Python просматривает значения в словаре.Я знаю, как сделать это в коде, и все ответы, которые я прочитал, просто объясняют, как это сделать.Я хочу понять, как python находит значения, так как я думал, что значения словаря были связаны с ключами.Элементы словаря также имеют индексное значение или что-то?Спасибо за ответы или ссылки на соответствующий источник заранее:)

Я гуглил, stackoverflow и прочитал.

edit: мне интересно, как Python3.7 достигает этого

1 Ответ

0 голосов
/ 13 мая 2019

Согласно исходному коду (dict_items(PyDictObject *mp)) выделен список из n (размер # пар ключ / значение в словаре) и для каждого элемента, отличного от нуля (строка 2278 : if (value != NULL)), оно установлено в соответствующем индексе списка кортежей. Сам объект python - это, по сути, кусок памяти, который знает размер каждого объекта (offset), где начинаются значения (value_ptr) и где находятся ключи (ep). Поэтому, когда вы получаете ключи / значения (for k,v in object), он в основном делал полный обход использованной части выделенной памяти для объекта.

Кстати, это может помочь узнать, что PyList_SET_ITEM - это просто макрос для установки значения в массиве по его желаемому индексу: #define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item\[i\] = (v)). Поскольку массивы - это просто значения, хранящиеся последовательно в памяти, оператор индекса знает, как разместить значение в ячейке памяти start + (sizeOf(object)*index).

Отказ от ответственности: это первый раз, когда я пытался прочитать исходный код Python, поэтому моя интерпретация может быть немного неправильной или упрощенной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...