|
|
|
|
|
by gshulegaard
3505 days ago
|
|
I think there is a disconnect here, I showed you how you could place a mutable object as a dict key in Python. One which uses the object itself (id() property) for the hash. > If you want something immutable just put something immutable in. My point is what do you expect if you do this: >>> x = (1, 2) >>> y = (1, 2) >>> set([x, y]) I would argue that you would expect: >>> set([(1,2)]) Since x is equal to y. But if you base the hash by default on id, you would get: >>> set([(1, 2), (1, 2)]) # set([x, y]) Since x and y are different instances (have different id()) properties. I would argue that it's more useful/predictable for built-ins to hash based on content rather than id(). However, you can still hash based on id() but simply creating your own object (as I demonstrated). So you get sensible defaults for built-ins but also the option of hashing mutable objects. |
|
Anyway, it's configurable for example in Java (http://stackoverflow.com/questions/9440380/using-an-instance...) - default is to use the reference but you can override object methods to change that. Similarly for C#(http://stackoverflow.com/questions/634826/using-an-object-as... or http://stackoverflow.com/questions/8952003/how-does-hashset-...).