Dennis Sweeney <sweeney.dennis...@gmail.com> added the comment:

A demo:

>>> class Int(int):
...     hash_calls = 0
...     def __hash__(self):
...         Int.hash_calls += 1
...         return super().__hash__()
...
>>> left = {Int(1): -1, Int(2): -2, Int(3): -3, Int(4): -4, Int(5): -5, Int(6): 
>>> -6, Int(7): -7}
>>> right = {Int(1): -1, Int(2): -2, Int(3): -3, Int(4): -4, Int(5): -5, 
>>> Int(8): -8, Int(9): -9}
>>> Int.hash_calls = 0
>>> left.items() ^ right.items()
{(9, -9), (7, -7), (8, -8), (6, -6)}
>>> Int.hash_calls
<Result: 14 on Master, but only 4 on PR 20718>


It looks like the same trick (searching by key and comparing values before 
maybe constructing a 2-tuple) might give similar performance improvements for 
dict_items.__or__, dict_items.__and__, and dict_items.__sub__. Is it worth 
discussing these other operators in this issue?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue40889>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to