1
在下面的代码中,为什么n
的值被修改? (playground link)复制后原始对象仍在修改中
package main
import (
"fmt"
"math/big"
)
func main() {
n := big.NewInt(5)
nCopy := new(big.Int)
*nCopy = *n
// The values of "n" and "nCopy" are expected to be the same.
fmt.Println(n.String(), nCopy.String(), &n, &nCopy)
nCopy.Mod(nCopy, big.NewInt(2))
// The values of "n" and "nCopy", I would think, should be different.
fmt.Println(n.String(), nCopy.String(), &n, &nCopy)
}
阅读this answer似乎是说,在我的例子中,第三行的main()
应的n
内容的副本。在两个Println
声明中输出的两个变量的地址似乎也表明两个big.Int
被存储在单独的存储器位置中。
我意识到,而不是使用*nCopy = *n
我可以使用nCopy.Set(n)
和我的最终Println
将显示我所期望的。但我很好奇为什么*nCopy = *n
似乎保留了这两个指针之间的“联系”。
因此'* nCopy = * n'不是“深层复制”。底层结构可能会或可能不会被复制? – jason 2014-10-12 02:10:53