Для того чтобы дать вам точный ответ, мне необходимо увидеть конкретный код, поскольку поведение функции `print` и результат работы программы зависят от контекста.
Функция `print` в большинстве языков программирования просто выводит текст или другие данные в консоль или стандартный вывод. Работа `print` условно может быть представлена такими шагами:
1. Принимает входные данные (аргументы), которые нужно напечатать.
2. Преобразует эти данные в строку (если они еще не в виде строки).
3. Отправляет эту строку в стандартный вывод (обычно это консоль).
4. Там системой вывод строки осуществляется вывод на экран пользователя или в файл логов.
Теперь касательно второй части вопроса. Если в программе значение переменной изменяется, но функция `print` все равно возвращает "5", это может быть по разным причинам:
1. Условие, при котором переменные должны были измениться, не выполняется, и поэтому значения переменных остаются неизменными, что приводит к тому, что `print` выводит исходное значение, например "5".
2. Переменные изменяются после вызова функции `print`, и изменения не влияют на уже выведенное значение.
3. Может использоваться механизм сложности сферы видимости переменных, когда переменные с одинаковыми именами присутствуют в разных областях видимости, и `print` обращается к той, которая содержит "5".
4. В программе могут использоваться дополнительные механизмы, такие как мемоизация или кэширование результатов, которые позволяют повторно возвращать "5", независимо от изменений переменных.
Без более конкретного кода я могу только предполагать. Если вы предоставите код, в котором происходит описанное вами, я смогу дать более точный ответ.