On 11/3/2017 5:24 AM, Ali Rıza KELEŞ wrote:
Hi,
Yesterday, while working with redis, i encountered a strange case.
I want to ask why is the following `True`
```
"s" is b"s".decode()
```
while the followings are `False`?
```
"so" is b"so".decode()
"som" is b"som".decode()
"some" is b"some".decode()
```
Or vice versa?
I read that `is` compares same objects, not values. So my question is
why "s" and b"s".decode() are same objects, while the others aren't?
For the same reason as
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 1000
>>> b = 1000
>>> a is b
False
For CPython, 'small' ints are cached on startup. Ditto for 'small'
strings, which I think includes all 128 ascii chars, and maybe latin1
chars. Details depends on the implemention and version. The main use
of 'is' for immutable builtins is for developers to test the
implementation in the test suite.
--
Terry Jan Reedy
--
https://mail.python.org/mailman/listinfo/python-list