python - Golang中Python的“id”函数相当于什么?
问题描述
Golang中Python的“id”函数相当于什么?
id 是我通常用来比较 Python 中两个对象是否相同的东西(通过交叉检查它们的“id”是否相同。当然也有例外——比如有时在 PyTorch 张量中,但大多数情况下这是可行的)。
对于 Golang 中的相同,我发现您可以使用此答案中提到的函数DeepEqual。但是想知道 Python 中是否有 id 的等价物,这 tbh 是一个非常方便的函数。
解决方案
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
import "github.com/google/go-cmp/cmp"
包 cmp 确定值的相等性。
这个包旨在成为一种更强大、更安全的反射替代方案。DeepEqual 用于比较两个值在语义上是否相等。
推荐阅读
- c# - Newtonsoft.Json 内存不足异常
- android - 同步多个 api 调用 Android RxJava
- java - 使用自定义 Unix 组编写 Spark 数据集
- dockerfile - 运行 docker 容器时文件上的“权限被拒绝”
- javascript - 微型 MCE 和 Django
- javascript - 如何拦截类实例中的所有错误?
- python - 如何定义需要来自不同类的属性的方法?
- sql - 基于三个限制关系的 SQL 查询
- javascript - 在不导航的情况下更改路由器 URL,但添加到浏览器历史记录
- reactjs - React Native - StackNavigator 标头具有双倍高度