Существуют ли эти «ссылки» в виде указателей на физическое состояние или виртуальной концепции для объяснения?

1

Я читал заявления в "беглом питоне"

Стандартная библиотека предлагает богатый выбор типов последовательностей, реализованных в C:

Список последовательностей контейнеров, кортеж и collection.deque могут содержать элементы разных типов.

Плоские последовательности str, bytes, bytearray, memoryview и array.array содержат элементы одного типа.

Контейнерные последовательности содержат ссылки на объекты, которые они содержат, которые могут быть любого типа, тогда как плоские последовательности физически сохраняют значение каждого элемента в пределах его собственного пространства памяти, а не как отдельные объекты. Таким образом, плоские последовательности более компактны, но они ограничены сохранением примитивных значений, таких как символы, байты и числа.

Контейнерные последовательности содержат ссылки на объекты, которые они содержат,

Имеются ли references как указатели в физическом состоянии или просто воображаемое понятие для иллюстрации?

  • 0
    Это концепция: x = list(); x.append(1); print(x) ; msgstr "имена (или ссылки) списка". Реализация - это «физический статус».
  • 0
    Занимает ли он память как указатель? @user2864740 user2864740
Показать ещё 1 комментарий
Теги:

1 ответ

2
Лучший ответ

В качестве детали реализации 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, но для облегчения потребностей различных стратегий сбора мусора, используемых каждым из них, легко может быть больше слоев обертывания, абстракции и косвенности.

  • 0
    Таким образом, ссылка на дыру должна содержать адрес объекта, а указатель - адрес объекта, на который он указывает. Кажется разумным рассматривать ссылку как указатель.
  • 1
    @ Райдердрагон: Да. Понятие «ссылки» варьируется от языка к языку, поэтому использование термина «ссылка» для того, что делает Python при общении с кем-то из фона C ++, может вызывать путаницу (когда ссылки используют при необходимости указатели под капотом, но часто получают покончить с трюками с псевдонимами на уровне компилятора, которые в конечном итоге могут использовать исходный объект напрямую, фактически не сохраняя указатель на него где-либо). Но да, ссылки на Python ведут себя как указатели, которые автоматически разыменовываются во всех случаях, кроме присваивания (где указатель копируется, а не на что он указывает).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню