Python内建对象(Python 源码剖析第一章)

本文深入探讨了Python中对象的内部结构,包括引用计数、类型信息、变长对象的大小,以及PyTypeObject结构体的详细字段说明,揭示了Python对象机制的核心原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

ExpandedBlockStart.gifPyObject
1 #define PyObject_HEAD                   \
2     _PyObject_HEAD_EXTRA                \
3     Py_ssize_t ob_refcnt;               \
4     struct _typeobject *ob_type;
5 
6 typedef struct _object {
7     PyObject_HEAD
8 } PyObject;

 

  Python里对象机制的核心其实非常简单,一个是引用计数,一个是类型信息。

ExpandedBlockStart.gifPyVarObject
1 #define PyObject_VAR_HEAD               \
2     PyObject_HEAD                       \
3     Py_ssize_t ob_size; /* Number of items in variable part */
4 #define Py_INVALID_SIZE (Py_ssize_t)-1
5 
6 typedef struct {
7     PyObject_VAR_HEAD
8 } PyVarObject;

 

  变长对象多了ob_size表明元素的个数。

ExpandedBlockStart.gifPyTypeObject
 1 typedef struct _typeobject {
 2     PyObject_VAR_HEAD
 3     const char *tp_name; /* For printing, in format "<module>.<name>" */
 4     Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */
 5 
 6     /* Methods to implement standard operations */
 7 
 8     destructor tp_dealloc;
 9     printfunc tp_print;
10     getattrfunc tp_getattr;
11     setattrfunc tp_setattr;
12     cmpfunc tp_compare;
13     reprfunc tp_repr;
14 
15     /* Method suites for standard classes */
16 
17     PyNumberMethods *tp_as_number;
18     PySequenceMethods *tp_as_sequence;
19     PyMappingMethods *tp_as_mapping;
20 
21     /* More standard operations (here for binary compatibility) */
22 
23     hashfunc tp_hash;
24     ternaryfunc tp_call;
25     reprfunc tp_str;
26     getattrofunc tp_getattro;
27     setattrofunc tp_setattro;
28 
29     /* Functions to access object as input/output buffer */
30     PyBufferProcs *tp_as_buffer;
31 
32     /* Flags to define presence of optional/expanded features */
33     long tp_flags;
34 
35     const char *tp_doc; /* Documentation string */
36 
37     /* Assigned meaning in release 2.0 */
38     /* call function for all accessible objects */
39     traverseproc tp_traverse;
40 
41     /* delete references to contained objects */
42     inquiry tp_clear;
43 
44     /* Assigned meaning in release 2.1 */
45     /* rich comparisons */
46     richcmpfunc tp_richcompare;
47 
48     /* weak reference enabler */
49     Py_ssize_t tp_weaklistoffset;
50 
51     /* Added in release 2.2 */
52     /* Iterators */
53     getiterfunc tp_iter;
54     iternextfunc tp_iternext;
55 
56     /* Attribute descriptor and subclassing stuff */
57     struct PyMethodDef *tp_methods;
58     struct PyMemberDef *tp_members;
59     struct PyGetSetDef *tp_getset;
60     struct _typeobject *tp_base;
61     PyObject *tp_dict;
62     descrgetfunc tp_descr_get;
63     descrsetfunc tp_descr_set;
64     Py_ssize_t tp_dictoffset;
65     initproc tp_init;
66     allocfunc tp_alloc;
67     newfunc tp_new;
68     freefunc tp_free; /* Low-level free-memory routine */
69     inquiry tp_is_gc; /* For PyObject_IS_GC */
70     PyObject *tp_bases;
71     PyObject *tp_mro; /* method resolution order */
72     PyObject *tp_cache;
73     PyObject *tp_subclasses;
74     PyObject *tp_weaklist;
75     destructor tp_del;
76 
77     /* Type attribute cache version tag. Added in version 2.6 */
78     unsigned int tp_version_tag;
79 
80 #ifdef COUNT_ALLOCS
81     /* these must be last and never explicitly initialized */
82     Py_ssize_t tp_allocs;
83     Py_ssize_t tp_frees;
84     Py_ssize_t tp_maxalloc;
85     struct _typeobject *tp_prev;
86     struct _typeobject *tp_next;
87 #endif
88 } PyTypeObject;
89 

 

转载于:https://www.cnblogs.com/zhtf2014/archive/2010/11/11/1874548.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值