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).