The following is a null-terminated string representation, although it keeps track of the length, so you cannot have a string object that refers to a substring that is not a suffix. This already limits the usefulness of your proposal, as it will add many complications to deal with the sufficient and the insufficient in different ways (and the rejection of zero lines leads to other consequences).
Allowing to refer to substrings of a string means complicating garbage collection and string processing. For each row, you will need to keep track of how many objects belong to each character, or to each range of indices. This means complicating the struct string objects and any operation that is associated with them, which means it’s probably large, slows down.
Add the fact that, starting with the python3 lines, there are 3 different internal views, and everything will be too dirty to be supported, and your suggestion probably does not provide sufficient advantages for adoption.
Another problem with this “optimization” is when you want to free up “large lines”:
a = "Some string" * 10 ** 7 b = a[10000] del a
After this operation, you have substring b , which prevents the release of a , a huge string. Of course, you could make copies of small lines, but what if b = a[:10000] (or another large number)? 10,000 characters look like a large string that should use optimization to avoid copying, but it prevents reuse of megabytes of data. The garbage collector will have to continue to check whether it is worth freeing up a large string object and making copies or not, and all these operations should be as fast as possible, otherwise you will ultimately reduce the time.
99% of the time when the lines used in the programs are "small" (max. 10 thousand characters), so copying is very fast, while the optimizations you offer become effective with really large lines (for example, they take substrings of size 100 thousand from huge texts) and much slower with really small lines, which is a common case, that is, what should be optimized.
If you consider it important, then you can offer PEP, show the implementation and the resulting changes in the speed / memory usage of your proposal. If it is really worth the effort, it may be included in a future version of python.