为什么Python的列表结构使用** ob_item而不是* ob_item来存储PyObject

时间:2017-01-08 02:43:30

标签: python c

Python的列表结构如下所示:

typedef struct {
    PyObject_VAR_HEAD
    PyObject **ob_item;
    Py_ssize_t allocated;
} PyListObject;

为什么要使用** ob_item?我认为* ob_item已经足够了。

1 个答案:

答案 0 :(得分:2)

因为,与使用指针创建的任何列表一样,当您添加和删除元素时,您需要更改节点指针指向的内容,而不仅仅是指向的对象的值to(只有*ob_item才会得到; **ob_item让你“重新指向”指针。)

请记住,列表不会包含实际对象,它包含指向它们的指针。为了能够使用指向指针的指针(如我所提到的,能够重新指定节点的指针),您需要**