为了账号安全,请及时绑定邮箱和手机立即绑定

复制后原来的对象还在被修改

复制后原来的对象还在被修改

Go
倚天杖 2021-08-23 15:53:45
在下面的代码中为什么n要修改的值?(游乐场链接)package mainimport (    "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)}阅读这个答案似乎是说我示例中的第三行main()应该复制n. 两个Println语句中输出的两个变量的地址似乎也表明这两个big.Ints存储在不同的内存位置。我意识到*nCopy = *n我可以使用而不是使用nCopy.Set(n)我的最终结果Println会显示我期望的结果。但我很好奇为什么*nCopy = *n似乎保留了两个指针之间的“链接”。
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

Int 是一个带有nat 字段的结构体。一个 nat 是一个slice

当您复制 Int 时,原始和副本共享 nat 的支持数组。通过一个 Int 对后备数组的修改对另一个 Int 可见。

赋值不是深拷贝。结构体值的赋值相当于单独分配结构体中的字段。切片的赋值不会复制后备数组。


查看完整回答
反对 回复 2021-08-23
  • 1 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信