CPython中‘对象的值’能否给出正式定义?我的结论是否正确?
CPython中“对象的值”的定义探讨
能否为CPython中的术语“对象的值”给出正式定义?阅读相关资料后,我认为该术语在多数语境下指以下二者之一,此结论是否正确?
广义上:指对象结构体(派生自PyObject结构体)中存储的所有数据,排除类型标识、引用计数器及垃圾回收相关簿记字段,即结构体字段中除
ob_refcnt、ob_type及GC相关字段外的字节数据。Python对象的实例变量也存储在此区域,但不确定绑定方法的存储位置。
例如int类型对象的结构体展开后为:struct _longobject { Py_ssize_t ob_refcnt; /* object reference counter */ PyTypeObject* ob_type; /* object type designator*/ Py_ssize_t ob_size; digit ob_digit[1]; };其值为
ob_size和ob_digit[1]中存储的字节数据。狭义上:指通过
obj.__repr__()或obj.__str__()得到的对象字符串表示。该表示通常不直接存储在PyObject结构体中,由上述方法利用结构体字段计算得出,部分类型(如函数、文件对象)的这类表示无有效信息。
官方Python参考文档未定义“对象的值”,仅说明“每个对象都有身份、类型和值”;Python术语表也无相关定义,其对“对象”的定义中将“值”与“属性”并列,我不确定是否应按上述狭义定义理解。
经梳理后,我认为广义定义可称为**“对象值的内存/字节表示”(机器相关,不唯一),狭义定义可称为“对象的字符串表示”**。
内容的提问来源于stack exchange,提问作者Rodvi
相关产品推荐
相关产品推荐

