Why is that?
Why doesn't it just return an existing instance of the type, like bool,
int, str and other built-in non-mutable types do?
bool must return an instance, because it is designed to cast objects to a
boolean. Since (by design) True and False are singletons (doubletons?),
bool(x) will always return a pre-existing instance.
Other built-in immutable types do not promise to do that. For example:
py> a = float(42)
py> b = float(42)
py> a is b
False
Sometimes int and str will cache their instances, but this is an
implementation detail subject to change without notice from version to
version.
None, NotImplemented and Ellipsis are singletons, but unlikely bool,
there is no common use-case for having their types return the singleton
instance. The standard design pattern for singletons is to raise an
exception if you try to create an instance, so they do. However, this
behaviour really only makes sense for singletons that hold state. (If
they hold state, you might be tempted to change that state, not realising
that you are changing a singleton and not a second instance.)
In my opinion, this is a PITA for None and better behaviour would be to
return the pre-existing NoneType instance, but I didn't design the
language.