On Sat, 21 Apr 2012 15:02:00 +0200, Bernd Nawothnig wrote: > On 2012-04-20, dmitrey wrote: >> I have spent some time searching for a bug in my code, it was due to >> different work of "is" with () and []: >>>>> () is () >> True > > You should better not rely on that result. I would consider it to be an > implementation detail. I may be wrong, but would an implementation that > results in > > () is () ==> False > > be correct or is the result True really demanded by the language > specification?
It would be correct, and the result True absolutely is NOT demanded by the language. For example, Jython does not make that same optimization: steve@runes:~$ jython Jython 2.5.1+ (Release_2_5_1, Aug 4 2010, 07:18:19) [OpenJDK Client VM (Sun Microsystems Inc.)] on java1.6.0_18 Type "help", "copyright", "credits" or "license" for more information. >>> () is () False so code which relies on it is already broken. Python the language makes no promises that literals will always evaluate to the same object. The ONLY such promises that it makes are that a small handful of special constants are singletons: None NotImplemented True False and perhaps one or two others. Everything else is an accident of the implementation. The CPython interpreter is especially aggressive in optimizing multiple literals in the same line. Compare this: >>> x = 3.1; y = 3.1; x is y True with this: >>> x = 3.1 >>> y = 3.1 >>> x is y False Again, this is an accident of implementation, and cannot be relied on. -- Steven -- http://mail.python.org/mailman/listinfo/python-list