将是运营商身份使用测试。
我想知道,如果is运营商和id()函数调用任何__magic__方法,方式==调用__eq__。
is
id()
__magic__
==
__eq__
我有一些有趣的结帐__hash__:
__hash__
class Foo(object): def __hash__(self): return random.randint(0, 2 ** 32) a = Foo() b = {} for i in range(5000): b[a] = i
考虑一下dictb和…的价值b[a]
b
b[a]
的每个后续查找d[a]都是aKeyError或随机整数。
d[a]
KeyError
但随着对特殊方法的文档状态
[ x 的默认实现 。__hash__()返回id(x)。
因此,有 是 只是周围的其他方式两者之间的关系,但。
我在这里和这里已经看到了许多问题)已经帮助了许多困惑的人,但是我找不到这个问题的答案。is``id
is``id
不,is是直接指针比较,id只是将转换为的对象地址返回long。
id
long
来自ceval.c:
ceval.c
case PyCmp_IS: res = (v == w); break; case PyCmp_IS_NOT: res = (v != w); break;
v和w这里简单PyObject *。
v
w
PyObject *
来自bltinmodule.c:
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.)");