Quelle est la structure de données sous-jacente pour les listes Python?

Quelle est la structure de données sous-jacente typique utilisée pour implémenter le type de données de liste intégré de Python?

57
demandé sur Bakuriu 2009-05-27 10:22:56

3 réponses

Les objets List sont implémentés comme tableau. Ils sont optimisés pour rapide opérations à durée fixe et dépenses engagées O (n) coûts de déplacement de mémoire pour pop (0) et insert (0, v) opérations qui changent la taille et la position de la sous-jacente de la représentation des données.

Voir aussi: http://docs.python.org/library/collections.html#collections.deque

Btw, je trouve intéressant que le tutoriel Python sur les structures de données recommande d'utiliser pop(0) pour simuler un file d'attente mais ne mentionne pas O (n) ou l'option deque.

Http://docs.python.org/tutorial/datastructures.html#using-lists-as-queues

43
répondu e1i45 2009-05-27 14:07:31

Disponible:

typedef struct {
    PyObject_VAR_HEAD
    /* Vector of pointers to list elements.  list[0] is ob_item[0], etc. */
    PyObject **ob_item;

    /* ob_item contains space for 'allocated' elements.  The number
     * currently in use is ob_size.
     * Invariants:
     *     0 <= ob_size <= allocated
     *     len(list) == ob_size
     *     ob_item == NULL implies ob_size == allocated == 0
     * list.sort() temporarily sets allocated to -1 to detect mutations.
     *
     * Items must normally not be NULL, except during construction when
     * the list is not yet visible outside the function that builds it.
     */
    Py_ssize_t allocated;
} PyListObject;

Comme on peut le voir sur la ligne suivante, la liste est déclarée comme un tableau de pointeurs PyObjects.

PyObject **ob_item;
23
répondu Georg Schölly 2009-05-27 06:49:24

Dans l'implémentation Jython , c'est un ArrayList<PyObject>.

9
répondu nategood 2009-05-27 10:47:52