Golangであるスライスz = []Hogeを持つ構造体Aがあります。

type A struct{
    z []Hoge
}

このaの特定要素をAのメソッドBで新たに生成したスライスcにコピーし、それを返します。

func (a *A) B()[]Hoge{
    c := make([]Hoge, 2)
    c[0] = a.z[0]
    c[1] = a.z[1]
    return c
}

そこでこのcの要素に新たな値を代入するとa.zの要素まで変化してしまいます。おそらく、cがzの参照を持っているのだと思いますが、これを防ぐにはどうすればいいのでしょうか。ちなみにメソッドの*AをAに変えてやってみましたができませんでした。

c[0].Huga = "piyo"
//a.z[0]の要素までpiyoになる

追記:
上の説明がわかりづらかったので、例を作りました。よろしくお願いします。
https://play.golang.org/p/8c6ca441_Z