Модель памяти Python для этой программы

Мой запрос находится в нижеприведенной программе относительно символов, которые хранят значения и функции, когда они запускались на http://pythontutor.com/ .

модель памяти

Мой вопрос:

  1. Как выглядит модель выполнения python над программой выше в памяти перед началом интерпретации программы python? Как визуализировать этот макет памяти? например, c исполняемый файл имеет сегменты кода / стека / кучи / дополнительные / данные, как пример, я не сравниваю

  2. Is 'const' – имя области памяти 32/64 бит, сохраняющее значение 2 с типом, назначенным как целое число?

  3. add () / sub () / другие функции отображаются в столбце Objects в соответствии с диаграммой. Итак, как я воспринимаю функции, хранящиеся как объекты? Как это визуализировать?

  4. В соответствии с диаграммой: Is op – указатель функции, указывающий на функцию sub ()?

3 Solutions collect form web for “Модель памяти Python для этой программы”

Каждая программа C (скомпилированный язык) имеет сегменты кода / данных / стек / дополнительные / кучи, загруженные в память перед выполнением. Создает ли интерпретатор python любой макет памяти для каждой программы python перед началом интерпретации программы python? Если да, то как мне визуализировать этот макет памяти?

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

Что касается программы Python, то это только куча. Но сама компоновка похожа на любую другую программу.

Является ли const именем 32/64 бит области памяти, хранящей значение 2 с типом, назначенным как целое?

Это имя в текущем рабочем пространстве (здесь: в пространстве имен модуля), который по существу является dict, который выполняет назначения между строками и произвольными объектами. В этом случае строка const ссылается на целочисленный объект, который содержит значение 2 . (Этот объект может быть создан заново или повторно использован в зависимости от обстоятельств, это не имеет никакого значения, поскольку оно неизменно.)

add() / sub() / другие функции отображаются в столбце Objects в соответствии с диаграммой. Итак, как я воспринимаю функции, хранящиеся как объекты? Как это визуализировать?

Как написано в моих комментариях к ответу Игнасио:

В случае функций у вас есть объект, который имеет определенные поля, которые содержат, например, код в терминах байт-кода, количество параметров, которые он имеет, и т. Д. И он даже имеет свои методы, например __get__() который вызывается внутри для привязки метода к объекту или __call__() для вызова реальной функции, кроме __format__() , __repr__() и т. д.

Целочисленный объект имеет, где-то глубоко внутри, место для хранения фактического значения. В случае long() в Py2 или любом int() в Py3 он хранит данные для хранения значения (например, 2 ), а также длину, необходимую для него. Кроме того, он имеет ряд методов. Посмотрите на вывод dir(2) чтобы увидеть, что он имеет множество методов, например, для форматирования, для арифметики и т. Д.

В соответствии с диаграммой: Is op – указатель функции, указывающий на функцию sub() ?

Вид, да.

Существует объект функции, который внутренне знает, что его исходное имя было sub . Но это знание предназначено только для показа.

В вашем случае это относится к двум именам: op и sub . Так что обращение к любому из них имеет тот же результат.

Обратите внимание, что нет «указателей функций» как таковых, есть только ссылки или имена, которые относятся к объекту любого типа. Тип объекта фиксирован, но не «тип ссылки» (поскольку такой вещи нет).

  1. Словари по словарям. Словари – это самая важная структура номер 1 в Python.

  2. Это ключ к записи в словаре текущей области. Значение – это объект 2 .

  3. Это не то, что функции являются объектами, но некоторые объекты являются функциями. Или номера. Или словари.

  4. Это ключ к записи в словаре текущей области. Значение – sub .

  1. В Python не беспокойтесь о сегментах памяти и о том, что происходит за кулисами. Скорее, среды (области) важнее. Диаграмма блоков и указателей, которую вы включили, является разумным способом визуализации памяти. Белая часть показывает, как выглядит глобальная среда. Когда функция вызывается, создается новая (синяя) среда.

  2. const – переменная. Переменные в Python слабо динамически типизированный и может хранить что угодно. На самом деле целые числа Python не переполняются и могут хранить числа, превышающие 2 64 . В этом случае const является переменной (с запутанным именем), которая содержит номер 2 .

  3. Функция представляет собой абстрактное понятие вызываемого blob кода. Вы можете назначить его переменной, как и любое другое значение.

  4. Вы могли бы считать это указателем на функцию, если вам будет удобно, но тогда вы будете выступать в качестве программиста на С. Программист Python просто сказал бы, что op имеет функцию sub в качестве значения.

  • Не могли бы вы поделиться своей идеей, как вызвать команду python из встроенного Python.Net?
  • Есть ли бит-трюк трюк для проверки делимости числа на 2 или 3?
  • Как импорт работает с Boost.Python изнутри файлов python
  • Как извлечь комментарий из файла заголовка с помощью python, perl или sed?
  • Транзитивные зависимости для статических библиотек и SCons
  • Эффективнее использовать if-return-return или if-else-return?
  • Выполнение кода трассировки во встроенном интерпретаторе Python
  • Перенос механизма шаблонов Django на C
  • Python - лучший язык программирования в мире.