adding elements to set
Chris Angelico
rosuav at gmail.com
Thu Dec 8 12:37:18 EST 2011
On Fri, Dec 9, 2011 at 4:32 AM, Peter Otten <__peter__ at web.de> wrote:
> The only thing that has changed (in 2.7) is the algorithm to calculate the
> hash value. The bits are rotated to turn the four least significant bits
> into the most signicant ones. According to a comment in Objects/objects.c
> the change leads to fewer hash collisions.
Interesting, but what I saw was this:
>>> class C(object):
def __init__(self, x):
self.x = x
def __eq__(self, other):
return self.x == other.x
>>> s=set()
>>> c1=C(1)
>>> s.add(c1)
Traceback (most recent call last):
File "<pyshell#163>", line 1, in <module>
s.add(c1)
TypeError: unhashable type: 'C'
(This is in IDLE from Python 3.2 on Windows.)
However, s.add(object()) works fine. So subclasses don't get that.
Odd. Makes sense though - you can't get this unexpected behaviour as
easily.
ChrisA
More information about the Python-list
mailing list