こういうの、静的型付きでないせいでむしろ内部表現の違いを隠蔽できていないという感じがしますね (個人の感想)
たとえば Rust であれば Vec<i32> は i32 がヒープ上の連続領域に配置されるし、 struct MyI32Arr(Vec<i32>); であれば MyI32Arr は特定の内部表現を保障しない。
AsRef<[i32]> for MyI32Arr とか Deref<Target = [i32]> が実装されていれば連続領域にあることは保障されるが、ヒープ上であるとは保障しない。
Rust だとそういう「何が保障されていて何が隠蔽されているか」が型からある程度明示的に示されるんだけど、 Python とかは逆に静的型がないせいでそういう保障がない、むしろ「保障したくないことでも、現状あるがままの状態が続くと保障されていると誤解されがち」みたいなところがある
たとえば map() がリストを返すかイテレータを返すかが Python 2 / 3 で違う、みたいな話とか。
そんなん型が明示されていれば問題になりようがないでしょという程度の話なのに、静的型がないから問題になる