Как Python динамически распределяет переменные на лету? - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время я изучаю типизацию (строго, статически и динамически).

Мне было интересно, как 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, а потом вдруг снова строка или даже функция? Есть ли какая-то память, которая хранит, какой тип в данный момент находится по этому адресу или как его «интерпретировать»?

Спасибо!

...