mp := map[int][]int{}
slice := make([]int, 0, 1)
fmt.Printf("slice address:%p\n", slice)
mp[0] = slice
slice = append(slice, 1)
fmt.Println("after append")
fmt.Printf("slice address:%p\n", slice)
fmt.Println("slice:", slice)
fmt.Println("mp[0]:", mp[0])
fmt.Printf("mp[0] address:%p\n", mp[0])
输出:
slice address:0xc042008f78
after append
slice address:0xc042008f78
slice: [1]
mp[0]: []
mp[0] address:0xc042008f78
slice 的地址不会改变,因为它的上限在附加期间足够大。那么为什么map值不生效呢?
最佳答案
如 Go Slices: usage and internals 中所述,两个 slice 可能指向相同的内存位置,但可能具有不同的 len
和 cap
属性。
关于go - 从 map 值追加 slice 不会影响 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52056098/