在Python中创建两个具有相同值的不可变对象

Ele*_*naT 3 python immutability

在Python中是否可以创建具有相同值的两个不可变对象?

所以你明白我的意思,这里有一些例子:

>>> 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
Run Code Online (Sandbox Code Playgroud)

是否可以创建ab具有相同的值但a is b返回False?刚刚学习......:D

Tim*_*ker 5

当然,只需选择一个太大而无法缓存的值:

>>> 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
Run Code Online (Sandbox Code Playgroud)

只缓存小整数和短字符串(这取决于实现,所以你不应该依赖它).is应该只用于测试对象标识,从不用于测试相等性.

  • @ElenaT:避免依赖于标题值的"is"行为.有关详细信息,请参阅[Python"is"运算符与整数的意外行为](http://stackoverflow.com/questions/306313/python-is-operator-behaves-unexpectedly-with-integers). (2认同)