Будет True: при цепочечном присваивании a = b = 1 оба имени связываются с одним объектом. Это не требует объяснения кешем малых чисел.
Что возвращает оператор is при одинаковой инициализации переменных
Будет True: при цепочечном присваивании a = b = 1 оба имени связываются с одним объектом. Это не требует объяснения кешем малых чисел.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какое значение будет выведено оператором is, если обе переменные получают один и тот же объект при объявлении.
a = b = 1
print(a is b)
Ответ
Будет True: при цепочечном присваивании a = b = 1 оба имени связываются с одним объектом. Это не требует объяснения кешем малых чисел.
Правая часть цепочечного присваивания вычисляется один раз, после чего результат присваивается обоим именам.
a = b = 1
print(a is b) # True
is проверяет идентичность, а == — равенство значений. В данном примере идентичность обеспечена самой формой присваивания и сохраняется даже для объекта, который не кешируется:
a = b = []
assert a is b
Если впоследствии переприсвоить a, связь с b не изменится. Для сравнения независимо вычисленных чисел обычно нужен ==, поскольку одинаковые значения не обязаны храниться в одном объекте.