亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python的dict.pop是原子的嗎?

Python的dict.pop是原子的嗎?

蠱毒傳說 2021-03-31 21:14:43
相信dict.pop原子操作是合理的,因為KeyError如果缺少指定的鍵并且沒有提供默認值,它將引發原子操作,如下所示:d.pop(k)但是,文檔似乎沒有專門針對這一點,至少在專門文檔部分中沒有dict.pop。在我審查使用這種模式的我的答案時,我想到了這個問題:if k in d: del d[k]當時,我沒有想到在期間可能會存在密鑰的潛在條件if,但在時卻沒有del。如果dict.pop確實提供了原子替代方法,那么我應該在回答中指出這一點。
查看完整描述

2 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

對于默認類型,dict.pop()是C函數調用,這意味著它以一個字節碼求值執行。這使該調用成為原子操作。

Python線程僅在字節碼評估循環允許它們切換時切換,因此在字節碼邊界切換。某些Python C函數確實會回調Python代碼(請考慮__dunder__特殊的方法鉤子),但該dict.pop()方法沒有,至少對于默認dict類型而言不是。



查看完整回答
反對 回復 2021-04-06
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

實際上dict.pop()不是原子的。例如,如果您使用對象作為字典的鍵,Python必須調用對象的__hash __()實現。但是您可以使用dict.popitem()代替它,這確實是原子的。


查看完整回答
反對 回復 2021-04-06
  • 2 回答
  • 0 關注
  • 267 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號