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

Reply via email to