日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[cpyhon源代码]dict对象原理学习

發(fā)布時(shí)間:2024/4/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [cpyhon源代码]dict对象原理学习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Cpython 2.7 分支中,dict 對(duì)象的源代碼?lookdict 搜索算法

?

1 static PyDictEntry * 2 lookdict(PyDictObject *mp, PyObject *key, register long hash) 3 { 4 register size_t i; 5 register size_t perturb; 6 register PyDictEntry *freeslot; 7 register size_t mask = (size_t)mp->ma_mask; 8 PyDictEntry *ep0 = mp->ma_table; 9 register PyDictEntry *ep; 10 register int cmp; 11 PyObject *startkey; 12 13 i = (size_t)hash & mask; 14 ep = &ep0[i]; 15 if (ep->me_key == NULL || ep->me_key == key) //【1】 16 return ep; 17 18 if (ep->me_key == dummy) 19 freeslot = ep; 20 else { 21 //進(jìn)到這里說明 ep->me-key !=NULL && ep->me_key!=key && ep->me_key==Active 22 if (ep->me_hash == hash) { 23 startkey = ep->me_key; 24 Py_INCREF(startkey); 25 cmp = PyObject_RichCompareBool(startkey, key, Py_EQ); //[2]這里為啥要再比較一次? 26 Py_DECREF(startkey); 27 if (cmp < 0) 28 return NULL; 29 if (ep0 == mp->ma_table && ep->me_key == startkey) {//[3]這里明顯是相等的,為啥要再判斷一次? 30 if (cmp > 0) 31 return ep; 32 } 33 else { 34 /* The compare did major nasty stuff to the 35 * dict: start over. 36 * XXX A clever adversary could prevent this 37 * XXX from terminating. 38 */ 39 return lookdict(mp, key, hash); 40 } 41 } 42 freeslot = NULL; 43 }

?

  

兩個(gè)問題無法理解:

  1.1?dict 對(duì)象搜索算法中,進(jìn)入【2】處已經(jīng)說明了?ep->me_key!=key 這個(gè)條件成立,但是 【2】那里為啥要再次比較一次?me_key 和 key 呢?

百思不得其解!!!

? ? ? 原因: 【1】處為兩個(gè)指針做 == 比較,說明指針的內(nèi)容相同,即指向的是同一對(duì)象

? ? ? ? ? ? ? ? ? 進(jìn)入到流程【2】則說明兩個(gè)對(duì)象指向不同的內(nèi)存,但是在滿足兩個(gè)條件后也認(rèn)為他們“相等”,從而返回對(duì)應(yīng)的項(xiàng)目,條件如下:

? ? ? ? ? ? ? ? ? 一是 兩個(gè)對(duì)象哈希值相等

? ? ? ? ? ? ? ? ? 二是 兩個(gè)對(duì)象的值相等(比較算法由對(duì)象提供,通常是 __eq__方法)

? ? ?舉例:dict[10000]=10,此時(shí)需要搜索 d[10000]對(duì)象的 entry 對(duì)象,搜索時(shí) 指向 10000 的Pyobject* 明顯和之前 存入 dict[10000] 值時(shí)對(duì)應(yīng)的

? ? ? ? ? ? ? ?Pyobject 指針不一致,此時(shí) p(p->int(10000) me_key) != q(q->int(10000) key),因此不會(huì)進(jìn)入流程 【1】

? ? ? ? ? ? ? ?但是 p,q同時(shí)滿足規(guī)定的兩個(gè)條件,即hash值和 ob_val 都一致,因此返回 p 處的 (key,value)entry

? ?

? ? ?1.2 [3]處 判斷的條件明顯是成立的(參見藍(lán)色高亮部分),不理解為啥要重復(fù)判斷一次,暫時(shí)想不通~

? ? ?

轉(zhuǎn)載于:https://www.cnblogs.com/muyiblog/p/9387747.html

總結(jié)

以上是生活随笔為你收集整理的[cpyhon源代码]dict对象原理学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩欧美精品在线 | 99亚洲视频 | 欧美资源 | 成人精品毛片 | 日韩av片免费观看 | 我爱我色成人网 | 末路1997全集免费观看完整版 | 黄色录像一级大片 | 国产叼嘿视频在线观看 | 很黄的网站在线观看 | 阿v视频免费在线观看 | 激情久久网 | 星铁乱淫h侵犯h文 | 国产又粗又硬又长又爽的演员 | 秋霞成人 | 国产手机在线视频 | 国产精品av免费观看 | 日本一本高清视频 | 成人做爰69片免费看 | 美景之屋电影免费高清完整韩剧 | 狠狠干美女 | 91在线无精精品入口 | 色播激情网| 善良的公与媳hd中文字 | 五级黄高潮片90分钟视频 | 国产午夜伦鲁鲁 | 精品久久久视频 | 国产成年人免费视频 | 欧美一级黑人 | 日本无遮羞调教打屁股网站 | 17c一起操 | 欧美狠狠| 手机在线观看免费av | 成人性生交大片免费卡看 | 亚洲成人 av | 丰满少妇被猛烈进入一区二区 | 日韩欧美中文字幕精品 | 依人成人 | 中文字幕第一页在线播放 | 人妻久久久一区二区三区 | 体内精69xxxxxx| 无码任你躁久久久久久久 | 日本欧美国产一区二区三区 | 色婷婷综合久久久久中文一区二区 | 久久久久久蜜桃 | 污视频免费在线 | 成年人精品 | 免费a视频在线观看 | 午夜av剧场 | 国产精品96| 毛片免费在线观看视频 | 天天综合在线观看 | 成人不卡 | 伊人视频在线观看 | 男女做事网站 | wwwxxx日本人| 色悠久| 亚洲成人欧美 | 亚洲男人天堂网站 | 欧美一区二区三区爱爱 | 人妻无码一区二区三区久久 | 成人深夜福利在线观看 | 成人黄色免费看 | 无码少妇一区二区三区 | 清纯唯美亚洲激情 | 日日夜夜操视频 | 欧美精品色 | 亚洲卡一卡二卡三 | 亚洲欧美日韩国产一区二区三区 | 婷婷激情五月 | 成人午夜又粗又硬又大 | 91热久久 | 超薄肉色丝袜一二三 | 蜜桃aaa | 欧美另类69xxxx | 国产女主播在线一区二区 | 蜜桃av噜噜 | 成人午夜久久 | 国产精品国产精品国产专区不片 | sm在线观看 | 免费精品在线视频 | 久草手机在线视频 | 日本老太婆做爰视频 | 欧美精品久久久久久久久久 | 免费在线色 | 国产丰满大乳奶水在线视频 | 欧美高清一区二区三区四区 | 先锋影音av中文字幕 | 国产精品国语对白 | 成年人黄色在线观看 | 国产一国产精品一级毛片 | 狂野欧美性猛交免费视频 | 2020自拍偷拍| 国产乱码av| 国产不卡精品 | 日本99视频 | 成年人黄国产 | 欧美在线一区视频 | 四虎成人在线 |