Я читал заявления в "беглом питоне"
Стандартная библиотека предлагает богатый выбор типов последовательностей, реализованных в C:
Список последовательностей контейнеров, кортеж и collection.deque могут содержать элементы разных типов.
Плоские последовательности str, bytes, bytearray, memoryview и array.array содержат элементы одного типа.
Контейнерные последовательности содержат ссылки на объекты, которые они содержат, которые могут быть любого типа, тогда как плоские последовательности физически сохраняют значение каждого элемента в пределах его собственного пространства памяти, а не как отдельные объекты. Таким образом, плоские последовательности более компактны, но они ограничены сохранением примитивных значений, таких как символы, байты и числа.
Контейнерные последовательности содержат ссылки на объекты, которые они содержат,
Имеются ли references
как указатели в физическом состоянии или просто воображаемое понятие для иллюстрации?
В качестве детали реализации CPython да, они все на самом деле являются указателями уровня C к структурам, где структуры содержат информацию об объекте (включая подсчет ссылок, поскольку CPython использует подсчет ссылок для управления памятью).
Поэтому, когда вы делаете a = [1]
, сам по себе содержит указатель на a
list
(PyListObject
структуру, чтобы быть точными), который содержит указатель на массив PyObject*
(в области PyListObject
), а первый элемент хранится в это указатель на PyLongObject
(структура, расширяющая базовый PyObject
который соответствует типу int
на уровне Python на Python 3). Опять же, это все детали реализации, но да, вам нужно потратить указатель на память для хранения каждой такой ссылки в CPython (если вы не используете специально оптимизированные контейнеры уровня C, такие как array.array
, массивы numpy
, bytes
/bytearray
/str
или ctypes
, которые в силу хранения определенных типов могут хранить их как исходные C массивы, без внутренних указателей на объекты для каждого элемента).
Использование указателей под капотом, скорее всего, справедливо и для других интерпретаторов Python, но для облегчения потребностей различных стратегий сбора мусора, используемых каждым из них, легко может быть больше слоев обертывания, абстракции и косвенности.
x = list(); x.append(1); print(x)
; msgstr "имена (или ссылки) списка". Реализация - это «физический статус».