В питоне Optional[T] означает, что значение либо T либо null.
Но статическая типизация в питоне прикручена сбоку, и защищает только в IDE.
В расте Option<T> это enum со значениями Option::Some(T) и Option::None и до Т можно добраться только внутри if'а или местного аналога switch'а с проверкой Some тут или None.
В джаве чтобы чтобы сделать Object<T> придётся T превратить в тяжёлый объект и держать в куче.
В расте же
struct Foo<T> {
field: T,
}
весит ровно столько, сколько весит Т, в enum наверное еще байт добавится чтобы различать, какой тут вариант.
Поэтому Option<bool> весит примерно [один байт на OptionVariant]+[один байт на bool], т.е. это очень экономно.