On Fri, Aug 11, 2017 at 6:03 AM, Marko Rauhamaa <ma...@pacujo.net> wrote:
> Peter Otten <__pete...@web.de>:
>> Steve D'Aprano wrote:
>>> The C code says:
>>>>/* bottom 3 or 4 bits are likely to be 0; rotate y by 4 to avoid
>>>>excessive hash collisions for dicts and sets */
>>> which I think agrees with my comment: using the id() itself would put
>>> too many objects in the same bucket (i.e. too many collisions).
>> There's a subtle diffence: you expected objects with nearby memory
>> addresses to end up in the same "bucket" while actually all addresses
>> (are likely to) have the same low bits, and creation time does not
> I see no point in CPython's rotation magic.
Have you ever implemented a hashtable? The most common way to pick a
bucket for an object is to use modulo on the number of buckets.