Golang được phát triển từ C nên nó có khái niệm pointer. Pointer như một địa chỉ trỏ đến một vùng nhớ, khi nhiều pointer cùng trỏ đến một vùng nhớ thì tác động giá trị của một biến sẽ ảnh hưởng đến giá trị các biến còn lại.

b := a ở trên thực chất là set giá trị cho b cùng trỏ đến một vùng nhớ với a nên khi thay đổi phần tử của b thì a cũng thay đổi theo, để tránh điều đó xảy ra ta nên copy dữ liệu: