Dynamic arrays are not. Slices are. A slice is a pointer + length pair; it requires no runtime infrastructure to manipulate. A dynamic array, has slices that reference internal state in the GC which is where all the manipulation takes place (like appending).