在我的测试代码中,为什么元组的print
结果与None不同?似乎a,b指向同一个对象None
,但c,d指向不同的对象,尽管它们的值相同(都等于(a,b)
)。
我知道is
关键字检查后面的对象,而不仅仅是比较==
之类的值。在这里我使用元组,因为我认为元组是不可变的,所以至少它不是对象是可变的还是不可变的。
但为什么变量a,b不会创建并指向两个不同的None
个对象,如c,d对元组做什么?
a=None
b=None
c=(1,2)
d=(1,2)
print(a is b)
print(c is d)
答案 0 :(得分:6)
None
object is a singleton in python.因此结果。
而对于c
和d
,它会创建单独的元组。
从你的例子:
>>> id(None)
4454442584
>>> id(a)
4454442584
>>> id(b)
4454442584
>>> id(c)
4463917464
>>> id(d)
4463865584
答案 1 :(得分:6)
None
是一个单例对象:它只能存在一个实例。因此,引用None
的对象将始终具有相同的标识,并且两个或更多此类对象将始终通过标识(对象相等)测试:
>>> a = None
>>> b = None
>>> c = None
>>> a is b is c
True
同样适用于True
和False
>>> d = True
>>> (a is b is c) is d # proof of concept only
True
答案 2 :(得分:2)
'is'运算符会比较你想出的变量背后的对象。
a=None
b=None
print(a is b)
>True #both None are the same instanciations or objects
Python中的None对象是单例(https://docs.python.org/2/c-api/none.html),因此单例将类的实例化限制为一个对象(https://en.wikipedia.org/wiki/Singleton_pattern)。