Python: False vs 0

In Python,

  • The is operator tests for identity (False is False, 0 is not False).

  • The == operator which tests for logical equality (and thus 0 == False).

Technically neither of these is exactly equivalent to PHP’s ===, which compares logical equality and type – in Python, that’d be a == b and type(a) is type(b).

Some other differences between is and ==:

Mutable type literals

  • {} == {}, but {} is not {} (and the same holds true for lists and other mutable types)
  • However, if a = {}, then a is a (because in this case it’s a reference to the same instance)

Strings

  • "a"*255 is not "a"*255", but "a"*20 is "a"*20 in most implementations, due to how Python handles string interning. This behavior isn’t guaranteed, though, and you probably shouldn’t be using is in this case. "a"*255 == "a"*255 and is almost always the right comparison to use.

Numbers

  • 12345 is 12345 but 12345 is not 12345 + 1 - 1 in most implementations, similarly. You pretty much always want to use equality for these cases.

Leave a Comment