Python possède ces deux objets intégrés (parmi d'autres). Ce ne sont que des objets. au début, ils n'ont pas encore de noms, mais pour savoir à quoi nous nous référons, appelons-les 0x600D
et 0xBAD
.
Avant de commencer à exécuter un script Python (2.x), le nom True
se lie à l'objet 0x600D
, et le nom False
se lie à l'objet 0xBAD
, donc quand le programme se réfère à True
, il regarde 0x600D
.
Parce que 0x600D
et 0xBAD
savent qu'ils sont généralement utilisés par les noms True
et False
, c'est ce qu'ils sortie quand ils sont imprimés, à savoir la méthode __str__
de 0x600D
retours 'True'
et ainsi de suite.
True = False
se fixe maintenant le nom True
à un autre objet. A partir de maintenant, les deux noms True
et False
se réfèrent au même objet 0xBAD
, qui, une fois imprimé, sort False
.
True = True
ne fait pas vraiment quoi que ce soit: Il prend l'objet visé par le nom True
et lie le nouveau (et ancien) nom True
à cet objet. Depuis (en raison de l'étape précédente) True
se réfère à 0xBAD
avant cela, il se réfère toujours à 0xBAD
après cela. Par conséquent, l'impression sort toujours False
.
True = not True
premier prend l'objet que le nom True
est lié, qui est 0xBAD
. Il donne cet objet à l'opérateur not
. not
ne se soucie pas (ou de savoir) quel nom est utilisé ici pour se référer à 0xBAD
, il sait juste que lorsqu'il est donné 0xBAD
il devrait retourner 0x600D
.Cette valeur de retour est ensuite donnée à l'opérateur d'affectation =
, liant le nom True
à cet objet.
Depuis le nom True
maintenant une fois de plus fait référence à l'objet 0x600D
, appelant print True
sorties True
, et le monde est bon à nouveau.
est-ce pas une bonne vieille blague '#define vrai false' en action ici? – Amarghosh
Dans la version 3, l'assertion True = False déclenche une erreur sintax, donc je suppose que votre question fait référence à la version 2 – jab
qu'est-ce qui est étrange à ce sujet? soin d'élaborer? – ghostdog74