Re:Why does `True == False is False` evaluate to False in Py...
by Retric on Saturday May 02, 2020 @08:10AM
(#23051269)
Python’s edge cases are just as odd as every other language
“is”, “==“, and “=“ are all very different and none of them match their mathematical equivalents very well.
[ Parent
| on HN ]
Re:Why does `True == False is False` evaluate to False in Py...
by dhosek on Saturday May 02, 2020 @08:48AM
(#23051443)
Not really familiar with Python. Do you know why the second statement evaluates as false?
Re:Why does `True == False is False` evaluate to False in Py...
by mkl on Saturday May 02, 2020 @09:06AM
(#23051543)
Small integer caching: https://wsvincent.com/python-wat-integer-cache/
The objects for small integers are built-in and static, but 17^2 is too big, and so new integer objects are created when the expressions are evaluated. "is" checks if two expressions represent the same object in memory. "==" checks for equality of values.
Re:Why does `True == False is False` evaluate to False in Py...
by xen0 on Saturday May 02, 2020 @09:08AM
(#23051552)
CPython keeps an array for "small value" integers (I think in the range [-5, 256]). So when Python wants 256, it'll give you a reference to the existing object. Larger numbers require a brand new object.
Re:Why does `True == False is False` evaluate to False in Py...
by h8hawk on Saturday May 02, 2020 @09:09AM
(#23051557)
`is` is identity comparison and in python everything is "object". It check if two variable refer to same object (location in memory) or not. So you should not expect that `a is b` for `a=1.2 , b=1.2` be true. In this case actually first expression returned True is weird. because 0-256 objects are cached and every instance of them refer to same object.