Операция == - это сравнение значений, а is - это сравнение ссылок внутри памяти. Если значения равны через ==, но не равны через is - они просто хранятся в разных ячейках памяти.
То есть, == отвечает на вопрос, равны ли объекты? А is отвечает на вопрос - это один и тот же объект?
Посему, c is можете сравнивать типы, None, False, True, а с переменными используйте ==