locals(), якобы, возвращает локальный словарь имен текущей области видимости. Но почему в области выполнения функции изменения этого словаря не отражаются на переменных:
def f():
x = 1
locals()['x'] = 2
print(x)
f() # вывод: 1
def f():
locals()['x'] = 2
print(x)
f() # вывод: NameError: name 'x' is not defined
В случае globals(), например, все работает логично и предсказуемо.
Что вообще такое locals(), как он работает и для чего нужен?