В настоящее время я изучаю типизацию (строго, статически и динамически).
Мне было интересно, как python удается разрешить изменение типа с примитивных (например, int) на, скажем, строку:
def foo(a):
b = a
b = 0 # store int
b = "bar" # store string
b = -1 # store int again
Если я ошибаюсь, фрейм этой функции должен выглядеть следующим образом:
_________
|_________|
|____b____|
|___*sp___| // stack pointer
|___ebp___|
|___*rp___| // return pointer
|____a____|
|__xxxxx__| // caller frame
Но если b теперь содержит строку, это должно стать указателем на bss / память кучи, потому что строки имеют произвольный размер. Но если он содержит int, значение должно храниться по этому адресу.
Как Python управляет во время выполнения, чтобы "получить", какой тип хранится в переменной b?
Я имею в виду: как он понимает, что b не указатель в некоторый момент времени, но int, а потом вдруг снова строка или даже функция? Есть ли какая-то память, которая хранит, какой тип в данный момент находится по этому адресу или как его «интерпретировать»?
Спасибо!