Is it possible in Python to create two immutable objects with the same value?
So that you understand what I mean, here are some examples:
>>> a = 13
>>> b = 13
>>> a is b
True
>>> a = 13
>>> b = 26/2
>>> a is b
True
>>> a = 13
>>> b = int.__new__(int, 13)
>>> a is b
True
>>> a = 13
>>> b = int("13")
>>> a is b
True
Is it possible to create a and b with the same value but a is b to return False?
Just learning.... :D
解决方案
Sure, just choose a value that is too large to be cached:
>>> a = 256
>>> b = 256
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
>>> a = "hey"
>>> b = "hey"
>>> a is b
True
>>> a = "hey!"
>>> b = "hey!"
>>> a is b
False
Only small integers and short strings will be cached (and this is implementation-dependent, so you shouldn't rely on that anyway). is should only be used for testing object identity, never for testing equality.