Развёрнутое пояснение:
1. Создаётся кортеж route = ('start',).
2. Вызов tag(route) передаёт ссылку на этот кортеж в параметр path.
3. Внутри tag выполняется path += ('end',): так как tuple неизменяемый, Python не может расширить существующий объект, а создаёт новый кортеж ('start', 'end') и присваивает его локальной переменной path.
4. Переменная route в вызывающем коде продолжает ссылаться на исходный кортеж ('start',).
5. print(route) выводит ('start',).
Почему это важно: с неизменяемыми типами (tuple, str, int) оператор += никогда не меняет исходный объект, он лишь создаёт новое значение и переприсваивает локальную ссылку. Поэтому функция, которая должна «дополнить» переданный неизменяемый объект, должна явно вернуть результат, иначе вызывающий код не увидит изменений. Это частая ошибка при работе с путями, идентификаторами и конфигурационными ключами.
Post #4796
415
Python: задачки и вопросы
- ✍ 1