Python 有这两个(以及其他)内置对象。它们只是对象;一开始,它们还没有任何名字,但要知道我们指的是什么,我们称它们为0x600D
and 0xBAD
。
在开始执行 Python (2.x) 脚本之前,名称True
被绑定到 object 0x600D
,并且 nameFalse
被绑定到 object 0xBAD
,所以当程序引用 时True
,它会查看0x600D
.
因为0x600D
and0xBAD
知道它们通常用于名称True
and False
,这就是它们在打印时输出的内容,即返回的__str__
方法等。0x600D
'True'
True = False
现在将名称绑定True
到不同的对象。从现在开始,两个名称True
和False
引用同一个对象0xBAD
,当打印时,输出False
。
True = True
并没有真正做任何事情:它获取由 name 引用的对象True
,并将新(和旧)名称绑定True
到该对象。由于(因为上一步)True
是指0xBAD
在此之前,它仍然是指0xBAD
在此之后。因此,打印仍然输出False
。
True = not True
首先获取名称True
绑定的对象,即0xBAD
. 它将此对象提供给not
操作员。not
不关心(或知道)这里使用什么名称来指代0xBAD
,它只知道在给定时0xBAD
应该返回0x600D
。然后将此返回值提供给赋值运算符=
,将名称绑定True
到此对象。
由于名称True
现在再次指代对象0x600D
,调用print True
输出True
,世界再次美好。