y останется 4567, а x станет 4568. Целые числа неизменяемы: x += 1 создаёт новое значение и перепривязывает только x.
Как изменяется значение переменной после копирования и инкремента
y останется 4567, а x станет 4568. Целые числа неизменяемы: x += 1 создаёт новое значение и перепривязывает только x.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно вычислить, какое значение получит переменная y после выполнения приведённого кода, и пояснить, почему значение переменной x сохраняется или не сохраняется в y.
x = 4567
y = x
x += 1
# Каково значение y?
Ответ
y останется 4567, а x станет 4568. Целые числа неизменяемы: x += 1 создаёт новое значение и перепривязывает только x.
После y = x оба имени ссылаются на целое число со значением 4567. Операция увеличения не меняет этот объект, а связывает x с результатом сложения.
assert y == 4567
assert x == 4568
Здесь не требуется отдельного копирования числа. Такое поведение отличается от изменяемых контейнеров: например, list += [...] обычно изменяет сам список и будет видно через другие ссылки на него. Поэтому действие += зависит от типа объекта, а не всегда означает исключительно переприсваивание.