作者: Fe2+
日時: 2005/11/22(22:04)
Fe2+ です。

何か混乱されているようですが、in 演算子は3通りに定義できて、
1) シーケンスに対しては __getitem__ に 0,1,2,... を渡し等しいものが得
   られたら True、シーケンスが尽きたら False
2) イテレータに対しては next で要素を順に取り出し等しいものが得られた
   ら True、イテレータが尽きたら False
3) その他は __contains__ に引き渡して True/False を教えてもらう
となっているはずです。

辞書では3番目のアプローチで、実質的に has_key 呼び出しと同じことになる
(C での実装の詳細は知りませんが __contains__ のスロットと has_key が同
じ関数を指している…のかな)というのが速い理由だと思います。

-- 
MATSUI Fe2+ Tetsushi
 http://homepage3.nifty.com/text/
 (http://lowlife.jp/mft/ for blog)