I’m used to seeing if obj is None: in Python, and I’ve recently come across if obj is ():. Since tuples are not mutable, it sounds like a reasonable internal optimization in the Python interpreter to have the empty tuple be a singleton, therefore allowing the use of is rather than requiring ==. But is this guaranteed somewhere? Since which version of the interpreter?
[edit] the question matters because if () is not a singleton and there is a way of producing an empty tuple with a different address, then using is {} is a bug. If it is only guaranteed since Python 2.x with x > 0, then it is important to know the value of x if you need to ensure backward compatibility of your code. It is also important to know if this can break your code when using pypy / jython / ironpython…
From the Python 2 docs and Python 3 docs:
In other words, you can’t count on
() is ()to evaluate as true.