Что я перемещаю из-за объекта, у которого есть различия с шагом стоимости и ссылке?

Я понимаю различия между шагом под стоимостью и прохожу по ссылке, но исследовав немного относительно Пайтона, я нашел, что он не использует модели раньше упомянутые, а один так называемый "шаг объекте". Как кажется, он сходный с моделью, использованной в ЯЗЫКЕ ОБРАБОТКИ СПИСКОВ ЛИСП.

Что значит шаг объекте? Какие различия существуют между шагом объекте, стоимости, и из-за ссылки?

2
задан 13.04.2017, 16:00
2 ответа

Сначала, определения (мои, ввиду того, что я прихожу из мира C ++, где нет шага имени / объекте, так что я приспосабливаю немного определений, чтобы мочь сравнивать их):

  • Я возражаю: кусок памяти. У него есть адрес памяти, и нет двух объектов с равным адресом памяти (по крайней мере, в C ++).
  • Стоимость: контент или состояние объекта (а именно, что есть в куске памяти).
  • Переменная: имя, ассоциируемое с объектом. Отличать объекты по имени - более легкое, чем из-за адресов памяти: правда? Манипулировать переменной значит манипулировать объектом, отнесенным переменной.
  • Снабди ссылками: имя, ассоциируемое с переменной. Манипулировать ссылкой манипулирует с целью Вашей присоединенной переменной. Эквивалент, который должен говорить, что это альтернативное имя для существующего объекта.

С ésto, давайте переходить в различия (под предположением, который мы призываем к функции, параметр которой получен из-за стоимости, ссылки или имени / объекта соответственно):

  • Я прохожу по стоимости: создай новую переменную, объект которой - копия другого (два различных ящика с равной стоимостью / контентом; распределять изменяет контент локального ящика).

  • Я прохожу по ссылке: создается ссылка на переменную, полученную (а именно, создается другое имя для полученного объекта). Манипулировать ссылкой, значит манипулировать "разделенным объектом" (два имени для того же ящика; распределять изменяет контент разделенного ящика).

  • Я происхожу из-за objecto (или по имени): создается новая переменная, которая указывает на объект, полученный (два ящика, которые указывают на тот же объект; распределять способствует тому, чтобы локальный ящик указал на новый объект, способствуя тому, чтобы первоначальный объект уже не имелся).

    Различие с предыдущим состоит в том, что, в существо новая переменная, он переназначаемый, что значит, что a = o (если a это переменная, полученная по имени, и o любой тип varible или ссылки), с этого момента, делает, что a заметка в o (в Ваш присоединенный объект), не изменяя разделенного объекта (который прекратит иметься с этого момента).

    Однако, если a это была ссылка или нормальная переменная, a = o он делает, что стоимость объекта, указанного из-за a, будьте заменен стоимостью объекта, отнесенного из-за o. Ссылка всегда имеет объект, посланный, когда ссылка создается, и это не может "быть предотвращенным" "ни меняться" каким бы то ни было образом (ссылка не может превращаться от имени различного ящика).

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

4
ответ дан 24.11.2019, 12:50

Я нашел сходный вопрос, может быть, подайте тебе ответ, который они дали ему.

Понимая отсутствие указателей в Пайтоне

В Пайтоне все объект, созданный в динамической памяти (поддержанная автоматически). Когда ты призываешь к функции аргументы, они перемещены посредством Ваших указателей. Вот то, что известно как соглашение вызова объектом.

В другом ответе, он это говорит.

В общем, объекты reservan в динамической памяти процессов, и переменные - ссылки на них: почти почти, что ссылки - абстракции указателей, с какими-то свойствами больше.

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

Тогда в комментарии они отвечают это ему.

фальшивый, шаг параметров делается стоимостью, но относится друг к другу о стоимости ссылка.

3
ответ дан 24.11.2019, 12:50