<var> is None vs. <var> == None

Christian Heimes lists at cheimes.de
Fri Jan 23 16:53:39 EST 2009


Jason Scheirer schrieb:
> Yes. I know that there are the PyObject* structs defined for you
> Py_True, Py_False and Py_None in the C level. Confusingly enough, the
> integers -5 through 257 are also singletons where the is test will
> work, but any int out of that range will not.

Small ints are cached. You should use "is True" or "is False" in Python
2.x because user can overwrite the True and False objects. In Python 3.0
both True and False are truly immutable and global singletons -- and
keywords, too. The mutable nature of the name "True" makes a "while
True:" loop sightly slower than a "while 1:" loop, too.

Python 2.5:

>>> None = 1
  File "<stdin>", line 1
SyntaxError: assignment to None
>>> True = 1
>>>

Python 3.0
>>> True = 1
  File "<stdin>", line 1
SyntaxError: assignment to keyword
>>> None = 1
  File "<stdin>", line 1
SyntaxError: assignment to keyword




More information about the Python-list mailing list