Я могу лишь предположить, что значение, переданное в аргументе, имеет более высокий приоритет в значении переменной
На одном собесе мне задали такой вопрос
И пояснили, что при return возвращаемое значение кешируется, соотв. в finally можно изменять значение str, но вернётся всё равно уже закешированное состояние str в момент return