numpyを含むプログラムを書く中で、メンバーシップテストがnumpy dtypeオブジェクトに対して期待通りに機能しないことがわかりました。具体的には、結果はset
では予期しないが、list
またはtuple
では発生しません。メンバーシップテストのnumpy dtypeが奇妙な結果をもたらす
import numpy as np
x = np.arange(5).dtype
y = np.int64
print(x in {y}, x in (y,), x in [y])
結果はFalse True True
です。
は、Python 2.7と3.6の両方でnumpy 1.12.xがインストールされていることがわかりました。
理由は何ですか?
UPDATE
はDTYPEオブジェクトはPythonでハッシュ化に関するいくつかの仮定を尊重しないということになります。http://www.asmeurer.com/blog/posts/what-happens-when-you-mess-with-hashing-in-python/
とhttps://github.com/numpy/numpy/issues/5345
DTYPEオブジェクトの__hash__
と__eq__
実装はかなり悪い考え抜かれたser2357112と@Fabien
ありがとうございます!本当にそれを見てまで、どのように乱雑なnumpyの内部があるかわからない... – zym1010