-2

Если я правильно, динамическая типизация, например, в PythonДинамическая типизация означает изменение места памяти или изменение стоимости?

x=1 
x='abc' 

x может относиться к значениям различных типов в различных точках во время выполнения.

В приведенном выше примере, который делает x см здесь,

  • имя i.e.identifier x,
  • память, которая x относится,
  • или что-то еще?

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

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

  1. Имя является связанным приложением к различным местам памяти в различных точках во время выполнения, а также различного памяти сохраняет значения разных типов.

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

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

  2. Имя является переплетено с фиксированным местом памяти, а место ПАМЯТИ сохраняет некоторое значение, и мы можем изменить значение и его типа, хранящееся в месте памяти во время выполнения.

  3. Или что-то еще

Спасибо.

+1

3: адреса памяти не являются особенностью Python, и вы не должны заботиться о них. –

+0

Документация встроенной функции id содержит информацию, которую вам нужно imho: https://docs.python.org/3/library/functions.html#id –

+0

В вашем примере имя 'x' переустанавливается на другой объект с помощью различной идентичности и другого типа. Внутренняя реализация, вероятно, решит поместить ее в другую память, но это не имеет значения. – imreal

ответ

2

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

C, C++ и Java - все статически типизированные языки, где вы можете исправить какой тип переменная может ссылаться на во время компиляции. Переменные Python не фиксируются таким образом; вы не указываете тип переменной. Переменная - это просто ссылка на объект вместо этого, и поэтому ссылки типа x определяются во время выполнения.

Таким образом, x - это имя , идентификатор. В Python это тип-меньше. В статических языках ему был присвоен тип.Довольно часто, с точки зрения реализации, статически типизированный язык просто преобразует имя переменной в исходный код в адрес памяти скомпилированных кодовых ссылок, но это не относится к Python.

Как Python на самом деле реализует имена, это не то, что вам, как разработчику Python, нужно беспокоиться и может варьироваться от конкретной реализации до реализации. В CPython (реализация, которую вы загружаете с Python.org) идентификаторы являются ссылками на определенные местоположения в области кучи, области памяти, зарезервированной для объектов Python. Объекты добавляются и удаляются из кучи по мере необходимости динамически.

3

Динамическое определение области видимости - это нечто совершенно иное. От wikipedia:

С динамическим диапазоном, глобальный идентификатор относится к идентификатору, связанному с самым последней средой, и является редкостью в современных языках [4]. С технической точки зрения это означает, что каждый идентификатор имеет глобальный стек привязок. Представление локальной переменной с именем x перетаскивает привязку в глобальный стек x (который может быть пустым), который вылетает, когда поток управления выходит из области. Оценка x в любом контексте всегда дает верхнее связывание. Обратите внимание, что это невозможно сделать во время компиляции, потому что стек привязки существует только во время выполнения, поэтому этот тип области называется динамическим масштабированием.

Нет, это не имеет ничего общего с динамическим охватом.

+0

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