[issue38613] Optimize some set operations in dictkeys object
Inada Naoki
report at bugs.python.org
Mon Oct 28 07:55:45 EDT 2019
New submission from Inada Naoki <songofacandy at gmail.com>:
-, |, and ^ of dictkeys are implemented as:
PyObject *result = PySet_New(self);
// Call set.difference_update, set.update, set.symmetric_difference_update with other.
PySet_New(iterable) has optimized step for iterable is dict.
But since iterable is dictkeys, PyIter_Next() is called for all elements in the dict.
We can pass dict instead of dictkey object to PySet_New.
$ ./python -m pyperf timeit -o patched.json -s 'k = dict.fromkeys("abcdefghijklmnopqrstuvwxyz").keys(); s={1,2,3}' -- 'k | {1,2,3}'
$ ./python -m pyperf compare_to master.json patched.json
Mean +- std dev: [master] 778 ns +- 17 ns -> [patched] 550 ns +- 24 ns: 1.42x faster (-29%)
----------
components: Interpreter Core
messages: 355536
nosy: inada.naoki
priority: normal
severity: normal
status: open
title: Optimize some set operations in dictkeys object
type: performance
versions: Python 3.9
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue38613>
_______________________________________
More information about the Python-bugs-list
mailing list