Python只允許用於不可變對象的哈希值。例如,防止可變類的自動哈希函數
hash((1,2,3))
作品,但
hash([1,2,3])
提出了一個TypeError: unhashable type: 'list'
。請參閱Python documentation。但是,當我通過通常的boost::python::class_<>
函數將Boost.Python中的C++類包裝進來時,每個生成的Python類都有一個默認的散列函數,其中散列值與對象在內存中的位置相關。 (在我的64位操作系統上,散列值是除以8的位置。)
當我將類暴露給Python,其成員可以更改時(任何可變數據結構,所以這是非常常見的情況!) ,我不想要一個默認的散列函數,但想要調用hash()
就像用戶爲Python自己的可變數據類型所接收的一樣調用TypeError
。特別是,用戶不應該不小心使用可變對象作爲字典鍵。我如何在C++代碼中實現這一點?