在 Python 中,None 是一个独特的对象吗?

In Python, is None a unique object?

在我的测试代码中,为什么元组的 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)

None object is a singleton in python. 因此结果。

而对于 cd,它会创建单独的元组。

根据你的例子:

>>> id(None)
4454442584
>>> id(a)
4454442584
>>> id(b)
4454442584
>>> id(c)
4463917464
>>> id(d)
4463865584

None 是一个单例对象:它只能存在一个实例。因此引用 None 的对象将始终具有相同的标识,并且两个或多个此类对象将始终通过标识(对象相等性)测试:

>>> a = None
>>> b = None
>>> c = None
>>> a is b is c
True

同样适用于 TrueFalse

>>> d = True
>>> (a is b is c) is d # proof of concept only
True

'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) and therefore a singleton restricts the instantiation of a class to one object (https://en.wikipedia.org/wiki/Singleton_pattern)。