complex(False, True) — что выводит и почему
@python_quizРазберем этот квиз
Короткий разбор небольшого фрагмента Python-кода и причин полученного результата. Код:

Ожидаемый вывод программы:

Ниже разберём каждую часть результата, покажем демонстрации и объясним, почему другие варианты ответа не подходят.
Что делает complex(False, True)
- False и True в Python являются подтипами int, соответствуют 0 и 1 соответственно.
- complex(x, y) создаёт комплексное число x + y*j (j — мнимая единица в Python).
- Поэтому complex(False, True) эквивалентно complex(0, 1), то есть 1j.
Простой демонстрационный пример:

Разбор трёх выражений в print
- bool(z)
- Логическое значение комплексного числа определяется его нулевостью: ненулевое число даёт True, нулевое (0+0j) — False.
- z = 1j — это ненулевой комплекс, поэтому bool(z) возвращает True.
- z == 1j
- Оператор == сравнивает по значению. Поскольку z содержит те же числовые части, что и литерал 1j, сравнение даст True.
- z is 1j
- Оператор is проверяет идентичность объектов (т.е. указывают ли обе переменные на один и тот же объект в памяти).
- complex(False, True) создаёт новый объект комплексного числа, а литерал 1j — другое (возможно созданное отдельно) значение. Даже если значения одинаковы, объекты обычно разные, поэтому is вернёт False.
- Важно: is нельзя использовать для проверки равенства значений; он предназначен для проверки тождественности объекта.
Демонстрация идентичности через id():

Вывод покажет одинаковые числовые значения, но, как правило, разные id и False для is.
Почему другие варианты вывода неверны
Варианты, где bool(z) равняется False, не учитывают, что z = 1j — ненулевое число, значит bool(z) не может быть False.
Варианты, где z == 1j даёт False, игнорируют семантику оператора сравнения по значению: равные по составляющим комплексные числа считаются равными.
Вариант, где z is 1j даёт True, предполагает, что интернирование (повторное использование одного и того же объекта) произошло для комплексных чисел — это не гарантировано и в общем случае не так. Для проверки равенства следует использовать ==, а не is.
Короткие рекомендации
- Для проверки равенства чисел используйте ==.
- Для булевой проверки числовых значений помните: ненулевое число → True, ноль → False (включая комплексные числа).
- is применяйте только когда нужно проверить тождественность объекта (например, проверка на None: x is None).
Вывод: выражение complex(False, True) даёт 1j; логически это ненулевое число, равное 1j по значению, но не обязательно тот же самый объект в памяти.