Відмінності між a == b та a is b¶
== перевіряє значення, а is перевіряє, що обидві змінні посилаються на той
самий об'єкт. Для перевірки того, що значення однієї змінної
дорівнює якомусь іншому значенню, треба використовувати ==.
Із рекомендацій PEP 8: порівняння з None, завжди слід робити з is або is not, ніколи не з
операторами рівності ==, !=:
Comparisons to singletons like None should always be done with is or is not, never the equality operators.
Also, beware of writing if x when you really mean if x is not None – e.g.
when testing whether a variable or argument that defaults to None was set to
some other value. The other value might have a type (such as a container) that
could be false in a boolean context!
В інших випадках краще використовувати ==:
Приклад використання is (sw2 посилається на той самий список, що і sw1):
In [1]: sw1 = [10, 20, 30]
In [2]: sw2 = sw1
In [3]: sw1 is sw2 # (1)
Out[3]: True
In [4]: sw1 == sw2 # (2)
Out[4]: True
- sw1 та sw2 посилаються на той самий список, тому is повертає
True - оскільки це один і той же список, значення однакові
Змінні sw1 та sw2 посилаються на різні об'єкти з однаковими елементами:
In [6]: sw1 = [10, 20, 30]
In [7]: sw2 = [10, 20, 30]
In [8]: sw1 is sw2 # (1)
Out[8]: False
In [9]: sw1 == sw2 # (2)
Out[9]: True
- sw1 та sw2 посилаються на різні списки, тому is повертає
False - у списках однакові елементи, тому
==повертаєTrue
True/False¶
Don't compare boolean values to True or False using ==:
Worse:
Відповідно до рекомендацій PEP8, щоб перевірити, що якийсь об'єкт дорівнює True або False, краще використовувати такі вирази:
Приклади використання is поза темами курсу¶
Приклад функції для скасування задач asyncio, яка має скасувати всі задачі, окрім себе: