Slicing tuples returns a copy, which is O(n) time. This could be O(1) since tuples are immutable, by just pointing to the same data. This probably applies to other immutable structures as well, such as strings.
I think which technique (copy or view) is better depends on the situation. If you are making a large temporary slice, a view may be more efficient. But if you are making a long-term slice and don’t need the original any more, a copy would allow the original memory to be freed early. Do you have any use cases? You can already get a kind of slice view into bytes etc by using memoryview().
While it's theoretically possible, there's a reason why we haven't done this in the past: we don't want to keep the possibly large original object alive when using a slice. For buffer interface types, you can already use memoryview to get a view in case you need this. In most other cases, it's better to work with indexes into the original object rather than views on the data.
Proposals for strings views have be rejected precisely because of the keep-alive effect. I do not remember if tuples were explicitly part of earlier discussions. One could make the argument that million-item tuples, and especially slicing thereof is rarer than the same for strings. On the other hand, copying short slices of short to medium tuples is not a big deal. Because of previous discussions, I think this issue should be either closed or suspended for python-ideas discussion.
The support of sharing a content between different tuples requires changing the structure of the tuple object, allocating additional block for every tuple, adding a level of indirection and reference counting. This will increase memory consumption, creating and access time for all tuples. All this is critically important for Python interpreter. I think this idea has no a chance.