[
https://issues.apache.org/jira/browse/THRIFT-162?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12689030#action_12689030
]
Nicolas Trangez commented on THRIFT-162:
----------------------------------------
As I see it in
http://gitweb.thrift-rpc.org/?p=thrift.git;a=commitdiff;h=bccfbe9a6ea9a1fee27f3b201befcbf034090c97,
2 TFreezableDicts containing the same items can have another hash value
depending on insertion order since the hash is calculated based on the return
value of dict.items(), which is not ordered.
Shouldn't we sort this somehow before calculating the result hash?
> Thrift structures are unhashable, preventing them from being used as set
> elements
> ---------------------------------------------------------------------------------
>
> Key: THRIFT-162
> URL: https://issues.apache.org/jira/browse/THRIFT-162
> Project: Thrift
> Issue Type: Bug
> Components: Compiler (Python), Library (Python)
> Reporter: Esteve Fernandez
> Priority: Minor
> Attachments: immut-no-slots-v1.diff, immut-v2.diff,
> thrift-162_annotiations.patch, thrift-162_v2_annotiations.patch,
> thrift_py_hash.patch
>
>
> Let Foo be a Thrift structure:
> struct Foo {
> 1: i32 bar
> }
> If you want to use it properly as a set element or a as a dictionary key, the
> autoegenerated Python code will complain about not being hashable:
> >>> f1 = Foo()
> >>> f1.bar = 1
> >>> f2 = Foo()
> >>> f2.bar = 1
> >>> f1 == f2
> True
> >>> set([f1]) & set([f2])
> set([])
> >>> d = {}
> >>> d[f1] = 2
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> TypeError: unhashable instance
> Since Thrift structures already implement __eq__ and __ne__, they should
> implement __hash__ as well. The attached patch tries to mimic the behaviour
> of the Java compiler, including a HashCodeBuilder class written in Python.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.