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
在fromPython/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 */