SORU
12 EKİM 2010, Salı


Nasıl'in Uygulanan Listesi Python?

Bağlantılı liste, bir dizi mi? Etrafa baktım ve sadece insanlar tahminde bulundu. C bilgim kaynak kodu bakmak için yeterli değil.

CEVAP
18 EKİM 2010, PAZARTESİ


C kodu çok basit aslında. Bir makro genişleyen ve bazı alakasız yorumlar budama, temel yapı olarak bir liste tanımlar listobject.h,:

typedef struct {
    PyObject_HEAD
    Py_ssize_t ob_size;

    /* 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
     */
    Py_ssize_t allocated;
} PyListObject;

PyObject_HEAD başvuru sayısı ve türü bir tanımlayıcı içerir. Yani, overallocates vektör/bir dizi. Tam ne zaman böyle bir dizi yeniden boyutlandırmak için kod listobject.c. Aslında dizi çift değil, ama ayrılırken büyüyor

new_allocated = (newsize >> 3)   (newsize < 9 ? 3 : 6);
new_allocated  = newsize;

kapasitesi her zaman, nerede newsize istenen boyut (mutlaka allocated 1 çünkü extend tarafından rasgele bir sayı unsurları yerine append'ıng teker teker).

Ayrıca Python FAQ bkz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autocar

    Autocar

    11 Mart 2006
  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • wwjoshdo

    wwjoshdo

    25 Mayıs 2009