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

Golang中Python的“id”函数相当于什么?

Golang中Python的“id”函数相当于什么?

Go
繁华开满天机 2023-08-14 16:14:39
Golang中Python的“id”函数相当于什么?id 是我通常用来比较 Python 中两个对象是否相同的方法(通过交叉检查它们的“id”是否相同。当然也有例外 - 就像有时在 PyTorch 张量中一样,但大多数情况下这是有效的)。对于 Golang 中的相同情况,我发现您可以使用此答案中提到的函数DeepEqual 。但我想知道 Python 中是否有一个相当于 id 的函数,这确实是一个非常方便的函数。
查看完整描述

3 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

package main


import "fmt"


func main() {

    i := 32

    j := 32

    fmt.Printf("%p is %p\n", &i, &i)

    fmt.Printf("%p is not %p\n", &i, &j)

}

输出:


0xc000016100 is 0xc000016100

0xc000016100 is not 0xc000016108

游乐场:https://play.golang.org/p/nXAEJeImeXa

然而,


package main


import "fmt"


func main() {

    i := 32

    j := 32

    fmt.Printf("i %p is i %p; i == i %t\n", &i, &i, &i == &i)

    fmt.Printf("i %p is not j %p; i == j %t\n", &i, &j, &i == &j)


    fmt.Println()


    var v struct {

        i struct{}

        j struct{}

    }

    fmt.Printf("i %p is i %p; i == i %t\n", &v.i, &v.i, &v.i == &v.i)

    fmt.Printf("i %p is not j %p; i == j %t\n", &v.i, &v.j, &v.i == &v.j)

}

输出:


i 0x40e020 is i 0x40e020; i == i true

i 0x40e020 is not j 0x40e024; i == j false


i 0x1e52bc is i 0x1e52bc; i == i true

i 0x1e52bc is not j 0x1e52bc; i == j true

游乐场:https://play.golang.org/p/Wv814ZgPCul


封装CMP

import "github.com/google/go-cmp/cmp"

cmp 包确定值的相等性。

该包旨在成为 Reflect.DeepEqual 的更强大、更安全的替代方案,用于比较两个值在语义上是否相等。


查看完整回答
反对 回复 2023-08-14
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

使用 CPython,id返回内存中对象的地址。在 Go 中,您可以通过 & 符号获取指向对象的指针:


package main


import "fmt"


func main() {

    i := 32

    j := 32

    fmt.Printf("%p is %p\n", &i, &i)

    fmt.Printf("%p is not %p\n", &i, &j)

}

上面示例的输出在我的机器上如下所示:


0xc000016100 is 0xc000016100

0xc000016100 is not 0xc000016108


查看完整回答
反对 回复 2023-08-14
?
倚天杖

TA贡献1828条经验 获得超3个赞

您可以用来DeepEqual比较两个对象的内容。但是,我不认为 python 就是id这么做的。从 python 中的定义来看id,您所追求的似乎是指针等效,而不是DeepEqualid状态的函数定义

这是一个整数,保证该对象在其生命周期内是唯一且恒定的。

如果要比较两个指针值,则可以简单地使用==:如果两个指针指向同一对象,则它们相等。如果两个指针值不相等,它们仍然可能指向具有相同内容的对象,因此p1==p2可能为假,但DeepEqual(*p1,*p2)也可能为真。


查看完整回答
反对 回复 2023-08-14
  • 3 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

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