3 回答
TA贡献1936条经验 获得超6个赞
在Python中,所有值都是对对象的引用(即指针)。您永远无法获得对象本身作为值。所述is
操作者比较两个值,它们是指针,指针相等; 而==
运算符则比较两个这样的指针,以确保所指向的对象相等。
在Go中,它有点复杂。Go具有指针以及其他非指针类型(布尔,数字类型,字符串,数组,切片,结构,函数,接口,映射,通道)。对于非指针类型,要求指针相等是没有意义的。(这意味着什么?它将完成什么?)
因此,为了拥有与Python相同的情况,让我们将所有值都放在指针后面,这样所有变量都是指针。(有一个在创建的指针型“新”功能的许多围棋图书馆公约;和方法也对指针类型进行操作,所以这与该公约相兼容。)然后(如果a
和b
是指针)a == b
在围棋会比较两个这样的指针的指针相等性;并且您可以*a == *b
用来比较基础值(如果它们具有可比性)。
Go还具有几种非指针引用类型:切片,映射,函数和通道。通道==
是否相同,可比较使用。但是,无法对切片,地图和函数进行比较。虽然有可能使用反射。
TA贡献1789条经验 获得超10个赞
我不确定您想要什么。是关于变量的相等性还是变量值的标识。该答案针对第二个答案(“ 2个变量引用值的相同实例”)。如果我误解了,我将删除此答案。
== 我想是你想要的。
如果a和b的类型是指针,则a==b意味着a和b是指向相同值的指针。
以下程序打印false:
package main
import "fmt"
type test struct {
a int
}
func main() {
b := &test{2}
c := &test{2}
fmt.Println(c == b)
}
当此打印true:
b := &test{2}
c := b
fmt.Println(c == b)
c == b是足以使改变ca改变ba的条件
- 3 回答
- 0 关注
- 210 浏览
添加回答
举报