Ray's playground

 

Python中的Dict对象(Python 源码剖析第五章)

PyDictEntry
 1 typedef struct {
 2     /* Cached hash code of me_key.  Note that hash codes are C longs.
 3      * We have to use Py_ssize_t instead because dict_popitem() abuses
 4      * me_hash to hold a search finger.
 5      */
 6     Py_ssize_t me_hash;
 7     PyObject *me_key;
 8     PyObject *me_value;
 9 } PyDictEntry;
10 

 

PyDictObject
 1 typedef struct _dictobject PyDictObject;
 2 struct _dictobject {
 3     PyObject_HEAD
 4     Py_ssize_t ma_fill;  /* # Active + # Dummy */
 5     Py_ssize_t ma_used;  /* # Active */
 6 
 7     /* The table contains ma_mask + 1 slots, and that's a power of 2.
 8      * We store the mask instead of the size because the mask is more
 9      * frequently needed.
10      */
11     Py_ssize_t ma_mask;
12 
13     /* ma_table points to ma_smalltable for small tables, else to
14      * additional malloc'ed memory.  ma_table is never NULL!  This rule
15      * saves repeated runtime null-tests in the workhorse getitem and
16      * setitem calls.
17      */
18     PyDictEntry *ma_table;
19     PyDictEntry *(*ma_lookup)(PyDictObject *mp, PyObject *key, long hash);
20     PyDictEntry ma_smalltable[PyDict_MINSIZE];
21 }; 

posted on 2010-11-15 21:55  Ray Z  阅读(582)  评论(0编辑  收藏  举报

导航