This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
erthalion
commented
Jul 23, 2015
|
Thanks for sharing. There is one inconsistency, which is my favorite)
|
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
DRMacIver
Jul 23, 2015
Oh yes, that one! It gets better though:
>>> def foo():
... a = 1000
... b = 1000
... return a is b
...
>>> foo()
True
The reason is that the constants used here are stored in the function object, where they're deduplicated:
>>> foo.__code__.co_consts
(None, 1000)
So inside the function both the literals are looked up as the same constant.
There is basically zero behaviour you can count on for when two numbers are going to be reference equal in Python.
|
Oh yes, that one! It gets better though:
The reason is that the constants used here are stored in the function object, where they're deduplicated:
So inside the function both the literals are looked up as the same constant. There is basically zero behaviour you can count on for when two numbers are going to be reference equal in Python. |
This comment has been minimized.
Show comment
Hide comment
This comment has been minimized.
kxepal
Dec 16, 2015
Similar things are not always similar.
Python 3.4.3 (default, Nov 12 2015, 20:43:56)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a, b = b'foo', b'foo'
>>> a is b
True
>>> a, b = 'foo', 'foo'
>>> a is b
True
>>> a = 'foo'
>>> b = 'foo'
>>> a is b
True
>>> a = b'foo'
>>> b = b'foo'
>>> a is b
False
kxepal
commented
Dec 16, 2015
|
Similar things are not always similar.
|
Thanks for sharing. There is one inconsistency, which is my favorite)