Код внутри функции не исполняется до момента её вызова.
Поэтому первыми значениями переменных будут
а = 1 и b = 2.
После вызова функции мы используем внешнюю переменную а и локальную переменную b.
Меняем их местами. Теперь внешняя переменная а = 2, а локальная b = 1.
Выводим первую часть "2 1 ".
Выходим из функции. Во внешней среде у нас остались две переменные а, изменившее своё значение на 2, и b = 2 до сих пор.
Выводим вторую часть "2 2 ".
Получаем на стандартном выводе: "2 1 2 2 ".
=================
Если ответ удовлетворил, не забудь отметить его как "Лучший".