An exercise to help build the right mental model for Python data.
- Solution
- Explanation: “User-defined classes have __eq__() and __hash__() methods by default (inherited from the object class); with them, all objects compare unequal (except with themselves) and x.__hash__() returns an appropriate value such that x == y implies both that x is y and hash(x) == hash(y).”
#Python #memory_graph #Equality #Hashing


Yes indeed, the ‘int’ objects are stored and searched in the set based on their value, and the ‘Value’ objects are stored/searched based on their identity unless you define the above
__eq__and__hash__methods which cause them to be stored/searched based on value too. This is a Python design decision and that’s the point of this exercise. The fact that ‘int’ is an immutable type and we are replacing isn’t relevant. Try replacing/reassigning the ‘Value’ objects after added__eq__and__hash__, and you get the same result as for ‘int’. So the thing that really matters is how__eq__and__hash__are defined, and the default for a user-defined class is as stated in the “Explanation:” above.Maybe I should also show a class with
__eq__and__hash__defined based on value, but then it gets a bit long. I’ll have to rethink this exercises so that the point comes across better as it now seems to confuse a lot of people based on the down-votes. Thanks for feedback anyway.