![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1
typedef
struct
{
2 PyObject_VAR_HEAD
3 /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
4 PyObject ** ob_item;
5
6 /* ob_item contains space for 'allocated' elements. The number
7 * currently in use is ob_size.
8 * Invariants:
9 * 0 <= ob_size <= allocated
10 * len(list) == ob_size
11 * ob_item == NULL implies ob_size == allocated == 0
12 * list.sort() temporarily sets allocated to -1 to detect mutations.
13 *
14 * Items must normally not be NULL, except during construction when
15 * the list is not yet visible outside the function that builds it.
16 */
17 Py_ssize_t allocated;
18 } PyListObject;
2 PyObject_VAR_HEAD
3 /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
4 PyObject ** ob_item;
5
6 /* ob_item contains space for 'allocated' elements. The number
7 * currently in use is ob_size.
8 * Invariants:
9 * 0 <= ob_size <= allocated
10 * len(list) == ob_size
11 * ob_item == NULL implies ob_size == allocated == 0
12 * list.sort() temporarily sets allocated to -1 to detect mutations.
13 *
14 * Items must normally not be NULL, except during construction when
15 * the list is not yet visible outside the function that builds it.
16 */
17 Py_ssize_t allocated;
18 } PyListObject;