История изменений
Исправление FishHook, (текущая версия) :
это не переменные, у них id одинаков и это константы, под которые память в программе не выделена
в питоне первые 256 интегеров закешированы
В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.
виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?
def double(a):
return a + a
print(double(10))
print(double("abc"))
- виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
- а + а рассахариватеся в
а.__add__(a)
- ВМ ищет ключ с именем
__add__
в хеш таблице - Если не нашла, идет в класс и ищет
__add__
в хеш-таблице класса - Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение
То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.
Исправление FishHook, :
это не переменные, у них id одинаков и это константы, под которые память в программе не выделена
в питоне первые 256 интегеров закешированы
В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.
виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?
def double(a):
return a + a
print(double(10))
print(double("abc"))
- виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
- а + а рассахариватеся в
а.__add__(a)
- ВМ ищет ключ с именем
__add__
в хеш таблице - Если не нашла, идет в класс и ищет add в хеш-таблице класса
- Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение
То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.
Исправление FishHook, :
это не переменные, у них id одинаков и это константы, под которые память в программе не выделена
в питоне первые 256 интегеров закешированы
В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.
виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?
def double(a):
return a + a
print(double(10))
print(double("abc"))
- виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
- а + а рассахариватеся в
а.__add__(a)
- ВМ ищет ключ с именем add в хеш таблице
- Если не нашла, идет в класс и ищет add в хеш-таблице класса
- Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение
То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.
Исходная версия FishHook, :
это не переменные, у них id одинаков и это константы, под которые память в программе не выделена
в питоне первые 256 интегеров закешированы
В итоге с формальной т.з. можно сказать что и в Python, и в C++ есть элементы динамической типизации.
виртуальной машине питона вообще пофигу какой тип у переменной. Как по-вашему, почему следующий код валиден и работает?
def double(a):
return a + a
print(double(10))
print(double("abc"))
- виртуальная машина положит на стек объект типа PyObject. У этого объета есть указатель на значение, указатель на класс и указатель на хеш-таблицу атрибутов объекта.
- а + а рассахариватеся в а.add(a)
- ВМ ищет ключ с именем add в хеш таблице
- Если не нашла, идет в класс и ищет add в хеш-таблице класса
- Если нашла - излекает из хеш-таблицы функцию и вызывает её, если не нашла кидает исключение
То есть, компилятору вообще пофигу что там будет в рантайме. Рантайму вооще пофигу что там, пока не будут резолвится свойства и методы. Вот и весь хрен до копеечки, что вы выдумываете? Динамическая типизация - пофигу вообще что лежит в переменной пока ее не используют и лежать там может что угодно.