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

Nic*_*las 3 python object nonetype

在我的测试代码中,为什么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)
Run Code Online (Sandbox Code Playgroud)

kar*_*ikr 6

Noneobject是python中的单例.因此结果.

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

从你的例子:

>>> id(None)
4454442584
>>> id(a)
4454442584
>>> id(b)
4454442584
>>> id(c)
4463917464
>>> id(d)
4463865584
Run Code Online (Sandbox Code Playgroud)


Mos*_*oye 6

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

>>> a = None
>>> b = None
>>> c = None
>>> a is b is c
True
Run Code Online (Sandbox Code Playgroud)

同样适用于TrueFalse

>>> d = True
>>> (a is b is c) is d # proof of concept only
True
Run Code Online (Sandbox Code Playgroud)