Python的dict数据结构

1.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;

2._dictobject数据结构

 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 };

可以看出来dict使用的是hash数据结构!

posted @ 2015-07-08 20:22  天天AC  阅读(439)  评论(0编辑  收藏  举报