==
и !=
являются объектом значение операторы сравнения
is
и is not
являются объектом идентичность операторы сравнения
, как уже говорили другие, is
(и is not
) только тогда, когда вы действительно заботитесь , что пара переменных ссылается на точно такой же объект. в большинстве случаев вам все равно, поэтому вы должны использовать ==
и !=
.
однако, что вы можете заметить, если вы посмотрите на большую часть кода Python, так это то, что is
(и is not
) с большей вероятностью будут используется при сравнении с True
, False
и None
. главная причина этого заключается в том, что эти объекты являются синглетонами, то есть имеется только один экземпляр каждого из этих значений. Почему это имеет значение? ну, это приводит к другой причине ... скорость.
с ==
и !=
интерпретатор должен подтянуть оба упомянутых объекта, чтобы провести сравнение (независимо от того, являются ли они одинаковыми или нет) в то время как is
и is not
просто проверяют значения объектов, на которые они ссылаются. сказав это, вы можете видеть, что последняя пара будет работать быстрее, потому что вам не нужно извлекать сами объекты, чтобы сделать сравнение. Вот тест скорости, проведенный пару лет назад, в котором мы пришли к выводу, что для разовых это не имеет большого значения, но если его называют миллиардным разом в тесной петле, ну, это начнет складываться.
http://mail.python.org/pipermail/tutor/2008-June/062708.html
Суть в том, что вы можете использовать сравнения идентификаторов объектов для проверки по True
, False
и None
, а все остальное должно использовать прямые операторы равенства. мы не будем вдаваться в интернированные целые числа, методы привязанного экземпляра или что-то подобное. : -)