Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中对象的uuu hash_uuuu()和uuu eq_uuu()的源代码是什么?_Python_Python Internals - Fatal编程技术网

Python中对象的uuu hash_uuuu()和uuu eq_uuu()的源代码是什么?

Python中对象的uuu hash_uuuu()和uuu eq_uuu()的源代码是什么?,python,python-internals,Python,Python Internals,对象是所有新样式类的基础。在哪里可以找到对象的源代码?我想看看函数\uuuu hash\uuuu()和\uuuu eq\uuuu()是如何定义的 参考这个答案(),我在中搜索对象定义 由于某种原因,中没有定义\uuuuuuuuuuuuuuhash\uuuuuuuuu()和\uuuuuuuueq\uuuuuuuuuuuu()中的对象实现实际上在对象/typeobject.c中。查看该文件,您可以从中看到: object.\uuuu eq.\uuuu在中实现,而object.\uuuu hash.\

对象
是所有新样式类的基础。在哪里可以找到
对象的源代码?我想看看函数
\uuuu hash\uuuu()
\uuuu eq\uuuu()
是如何定义的

参考这个答案(),我在中搜索对象定义


由于某种原因,
中没有定义
\uuuuuuuuuuuuuuhash\uuuuuuuuu()
\uuuuuuuueq\uuuuuuuuuuuu()
中的
对象
实现实际上在
对象/typeobject.c
中。查看该文件,您可以从中看到:

object.\uuuu eq.\uuuu
在中实现,而
object.\uuuu hash.\uuuu
在from
Python/pyhash.c
中实现

在:


object.\uuuueq\uuuuu
根本不存在,因此
==
最终依赖于中的指针比较
\u Py\u HashPointer
仍然存在,但它在
中,
\uuu hash\uuu
\uuuu eq\uu
的默认实现是从基本
对象
类型继承的。您可以在以下位置找到其类型定义:

PyTypeObject PyBaseObject\u类型={
PyVarObject\u HEAD\u INIT(&PyType\u Type,0)
“对象”、/*tp\U名称*/
…
(hashfunc)\u Py\u HashPointer,/*tp\u hash*/
…
对象\u richcompare,/*tp\u richcompare*/
…
};
对于散列函数(
tp\u hash
),使用引用的默认散列函数,
\u Py\u HashPointer
。定义如下:

Py\u hash\t
_Py_散列指针(void*p)
{
Py_hash_t x;
尺寸y=(尺寸)p;
/*底部3或4位可能为0;将y旋转4以避免
dict和set的哈希冲突过多*/

y=(y>>4)|(y不确定是否相等,但对于散列,您可能希望查看@Waylan:不管它看起来是什么样子,这些函数实际上不是
对象。uuuuuueq\uuuuuu
对象。uuuuu散列
实现。
PyTypeObject PyBaseObject_Type = {
    PyVarObject_HEAD_INIT(&PyType_Type, 0)
    "object",                                   /* tp_name */
    ...
    (hashfunc)_Py_HashPointer,                  /* tp_hash */
    ...
    object_richcompare,                         /* tp_richcompare */
PyTypeObject PyBaseObject_Type = {
    PyVarObject_HEAD_INIT(&PyType_Type, 0)
    "object",                                   /* tp_name */
    ...
    0,                                          /* tp_compare */
    ...
    (hashfunc)_Py_HashPointer,                  /* tp_hash */
    ...
    0,                                          /* tp_richcompare */