In the documentation on built-in constants (excluding site constants) it's stated that:
Note: The names
None,False,Trueand__debug__cannot be reassigned (assignments to them, even as an attribute name, raiseSyntaxError), so they can be considered “true” constants.
If I'm not mistaken, True and False became "true" contants in Python 3. (As also described in the duplicate.)
Question is, why aren't the other two (Ellipsis, NotImplemented) "true" contants? Is there a use case for re-assigning these (numpy with Ellipsis perhaps?) that has exempted them from this limitation?
Exacerbating my confusion, in the documentation for standard library types, both the Ellipsis and NotImplemented types are, behaviorally, identical to the None type. Namely:
- They are singletons
- They don't support special operations.
This question is not related to the proposed duplicate: Why were True and False changed to keywords in Python 3. It asks something completely different, namely, why Ellipsis and NotImplemented are not "true" constants and not why True and False where changed into ones.