- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
21小时前关门了。
Improve this question
以下代码:
package main
import "fmt"
func main() {
var src = []int{1, 2, 3, 4, 5}
var dst []int = make([]int, 10)
fmt.Println(&src[0]) //0xc00001c210
dst = src // shallow copy
fmt.Println(&dst[0]) //0xc00001c210
copy(dst, src) // shallow copy
fmt.Println(&dst[0]) //0xc00001c210
}
使用简单赋值和copy()
内置函数执行浅拷贝copy()
内置函数的用途是什么?因为赋值操作是进行浅拷贝。
1条答案
按热度按时间lmvvr0a81#
您看到相同内存地址的原因是将
dst
片替换为src
-这使copy
无效。由于dst
和src
片指向相同内存,因此任何修改都将影响这两个片。通常,您需要将copy
指向不同的片/内存,以便可以单独修改片。copy
实际上是一个浅拷贝。它只将源切片直接引用的内存拷贝到目标切片引用的内存。它不会跟随指针并克隆其下的结构体(如果有)。另一个例子用指针强调了这一点:
这表明: