Basically, string indexing is a lot harder than it seems at first glance, depending on what you want.
[1]: https://doc.rust-lang.org/std/string/struct.String.html#meth...
IIRC that's what grapheme clusters are for.
So it handles the (very) common case of needing the same encoding multiple times (e.g. for all file paths on Windows), while not introducing too much overhead in memory or speed.
I could be mistaken on exact details though, especially since I recall there being multiple implementations even within py3.x.
This is great for high-level code, but painful to work with from native code, because it usually needs some specific encoding to call into other libraries, and it's usually UTF-8 - so you need to re-encode all the time.