Прежде всего, в pydoc-комментарии функции locals есть сноска о том, что синхронизация возвращённого функцией словаря с состоянием переменных не гарантируется и зависит от реализации. Конкретно в CPython в данный момент такой синхронизации не происходит потому, что locals
получает значения переменных из фрейма стека,
копирует в новый словарь и возвращает его. Сделано так, как ни парадоксально, для производительности.