It's not so much the inheritance hierarchy that I like about the Cocoa core classes, but the fact that mutability is a prominent part of the design. I think Python would be a better language if it had a mutable string type as well as a mutable byte-oriented data type. An immutable dict would be handy at times. An immutable list type would be great, too. Wait, we already have that.
I've often had the same thought myself. I'm imagining designing my own language, and I note that both mutable and immutable strings are handy, depending on what you're doing. The same is true of data containers (of all sorts, lists and dicts being examples). "What the heck?" I say to myself, "In *my* perfect language, there'll be mutable and immutable versions of every object. (With the obvious conversion behavior.) Why, you won't even have to code them separately... just specify some property indicating whether or not that instance is mutable."
Then I realize that C++ has exactly this feature (it's called "const"), and that I find it to be an annoyance far more often than I find it handy. And I begin to question.
-- Michael Chermside