gpt4 book ai didi

python - `is` 运算符是否在 Python 中使用了 __magic__ 方法?

转载 作者:太空狗 更新时间:2023-10-29 17:39:04 26 4
gpt4 key购买 nike

is运算符用于身份验证。

我想知道 is 运算符和 id() 函数是否调用任何 __magic__ 方法,== 调用 __eq__

我在查看 __hash__ 时玩得很开心:

class Foo(object):
def __hash__(self):
return random.randint(0, 2 ** 32)

a = Foo()
b = {}
for i in range(5000):
b[a] = i

想想字典 bb[a] 的值

d[a] 的每个后续查找都是 KeyError 或随机整数。

但是作为docs on the special methods状态

[the default implementation of] x.__hash__() returns id(x).

所以两者之间关系,但恰恰相反。

我见过很多questionsisid 上,以及 answers帮助了很多confused的想法,但我找不到这个问题的答案。

最佳答案

不,is 是直接指针比较,而id 只是返回转换为long 的对象的地址。

来自 ceval.c :

case PyCmp_IS:
res = (v == w);
break;
case PyCmp_IS_NOT:
res = (v != w);
break;

vw 这里只是 PyObject *

来自 bltinmodule.c :

static PyObject *
builtin_id(PyObject *self, PyObject *v)
{
return PyLong_FromVoidPtr(v);
}

PyDoc_STRVAR(id_doc,
"id(object) -> integer\n\
\n\
Return the identity of an object. This is guaranteed to be unique among\n\
simultaneously existing objects. (Hint: it's the object's memory address.)");

关于python - `is` 运算符是否在 Python 中使用了 __magic__ 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com