Python ofrece seis "constantes" predefinidas que, lejos de comportarse de forma homogénea, presentan peculiaridades notables según el mecanismo interno que las respalda. Tres de ellas —True, False y None— son palabras reservadas del lenguaje, es decir, tokens léxicos procesados directamente por el analizador sintáctico y no por el sistema habitual de resolución de nombres. Esto provoca, por ejemplo, que una expresión como x.True genere un SyntaxError, algo inaudito en el resto de identificadores del lenguaje.
Una cuarta constante, debug, es un identificador ordinario, pero está vetada para asignación y borrado, sin posibilidad de modificarla como atributo. Su valor es True por defecto y se convierte en False al ejecutar Python con la opción -O, emulando el comportamiento de las aserciones en compilaciones optimizadas. Resulta llamativo que, al intentar borrarla, se emita un SyntaxError pese a no tratarse de un problema sintáctico real, una rareza que también se observa con True, False y None.
Por último, Ellipsis (equivalente a ...) y NotImplemented no son verdaderas constantes: son simples objetos del módulo builtins que pueden ser sobrescritos con una asignación normal. De hecho, aunque setattr(builtins, 'True', 67) parece modificar el valor de True, el token léxico sigue devolviendo el booleano original, evidenciando la separación entre los nombres del espacio builtins y las palabras reservadas del lenguaje. En conjunto, el repaso muestra cómo Python distingue —sin una razón documentada— entre constantes tratadas como tokens, identificadores protegidos y builtins ordinarios, un pequeño zoo léxico que invita a reflexionar sobre el diseño del lenguaje.
