On Fri, Jul 7, 2017 at 8:41 AM, Nathan Ernst <nathan.er...@gmail.com> wrote: > Looks like single expression statements are handled a bit differently than > multiple expression statements: > > Python 3.5.2 (default, Nov 17 2016, 17:05:23) > [GCC 5.4.0 20160609] on linux > Type "help", "copyright", "credits" or "license" for more information. >>>> n = 4000; m = 4000; n is m > True >>>> n = 4000 >>>> m = 4000 >>>> n is m > False
It actually has to do with units of compilation. In the first example, all three statements are compiled together and the constants are optimized to the same object. In the second example, because you're testing this in the REPL they're compiled at different times and since 4000 is larger than what CPython will intern, you end up with different objects. If however, you take the second example and gather it into a function, you'll get the compile-time optimization again: >>> def f(): ... n = 4000 ... m = 4000 ... return n is m ... >>> f() True -- https://mail.python.org/mailman/listinfo/python-list