go - Golang 将 slice 附加到 slice 的 slice 上,那么 slice 会一直影响 slice 的 slice 吗?
问题描述
今天我得到了这个代码:
import "fmt"
func main() {
var results [][]int
combination := []int{1, 2, 3, 4, 5}
results = append(results, combination)
fmt.Println(results)
combination2 := combination[:len(combination)-1]
combination2 = append(combination2, 0)
fmt.Println(results)
}
输出显示:
[[1 2 3 4 5]]
[[1 2 3 4 0]]
那么为什么结果会受到影响呢?找不到任何原因,让我很困惑,谢谢你的回答!
解决方案
好吧,result
没有直接影响,而是combination
(或者更确切地说,它的底层数组)。
你“切片”combination
得到combination2
. 它们的底层数组是相同的。
现在,当您执行附加操作时,您基本上会说“在这个切片结束后我想要元素0
”。通过这样做,您还将第一个切片的最后一个元素更改为0
。
看看这个例子: https: //play.golang.org/p/m0bPJDj9kHs
copy()
PS您可以通过使用操作来防止这种情况。
推荐阅读
- javascript - 如何将烧瓶/jinja2 变量传递给 js 脚本?
- kubernetes - Kubernetes 中的 pod 到 pod 加密是什么?以及如何在 kubernetes 中使用 mTLS 实现 pod 到 pod 加密?
- react-native - 如何在 React Native 中创建一条将 View 分成两个相等边的水平线?
- android - 如何在 app:actionViewClass 中使用自定义视图
- shell - 通过 Ansible shell 模块的相同命令会产生与在终端中直接执行不同的结果
- javascript - 关于 javascript 如何使用包含键作为属性访问器的方括号来更新对象条目的问题
- selenium - Xpath-如果角色是活动/非活动将检索
- java - Tesseract:请确保将 TESSDATA_PREFIX 环境变量设置为您的“tessdata”目录
- excel - 复制和粘贴单元格值“X”次然后循环到下一行
- coldfusion - cflocation 是否调用 onRequest?