📖 В Python локальные и глобальные переменные хранятся в виде словаря. Вы можете получить доступ к этому словарю с помощью встроенных функций locals() и globals():
🔡 Когда мы объявляем переменную, Python проверяет его в словаре глобального пространства имен, если его нет, то добавляет. В CPython проверка происходит в LOAD_GLOBAL - это операция байт-кода в CPython, которая загружает глобальную переменную в стек, с помощью функции _PyDict_LoadGlobal():
➕ Так же функция осуществляет поиск в builtins, если значение не найдено в глобальном словаре, поэтому мы в третьей строке видим LOAD_GLOBAL для print в нашем примере.
🚫 _PyDict_LoadGlobal, в свободнопоточной сборке (--disable-gil), использовал непотокобезопасный _Py_dict_lookup и не блокировал словарь. В этом коммите переключились на использование потокобезопасной версии и модифицировали функцию для возврата новой ссылки
✔️ Также для _Py_dict_lookup добавлен assert о том, что словарь должен быть заблокирован, и исправлен упорядоченный dict для использования потокобезопасной версии.
👉 Подробнее в телеграм канале https://t.me/cpython_ru
#PEP703