示例
1 2 3 4 5 6 7 8 9 |
>>> a = () >>> b = () >>> id(a) == id(b) True >>> a = (1, ) >>> b = (1, ) >>> id(a) == id(b) False |
源码位置 Include/tupleobject.h |
Objects/tupleobject.c
结构
定义
1 2 3 4 5 |
typedef struct { PyObject_VAR_HEAD PyObject *ob_item[1]; } PyTupleObject; |
说明
1 2 3 4 5 6 7 8 |
1. PyObject_VAR_HEAD PyTupleObject在底层是个变长对象(需要存储列表元素个数). 虽然, 在python中, tuple是不可变对象 2. PyObject *ob_item[1]; 指向存储元素的数组 3. |
结构
构造方法
1 |
PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size); |
构造
看下构造方法定义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
PyObject * PyTuple_New(register Py_ssize_t size) { register PyTupleObject *op; Py_ssize_t i; // 大小为负数, return if (size 0) { PyErr_BadInternalCall(); return NULL; } // 如果大小=0, 空元组, 直接取free_list第一个返回 #if PyTuple_MAXSAVESIZE > 0 if (size == 0 & free_list[0]) { yon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-always" style=" margin-top: 12px; margin-bottom: 12px; font-size: 13px !important; line-height: 15px !important;">
源码位置 Include/tupleobject.h | 结构定义
说明
结构 构造方法
构造看下构造方法定义
|