mirror of
https://github.com/python/cpython.git
synced 2025-11-25 12:44:13 +00:00
property_descr_get() uses a "cached" tuple to optimize function
calls. But this tuple can be discovered in debug mode with
sys.getobjects(). Remove the optimization, it's not really worth it
and it causes 3 different crashes last years.
Microbenchmark:
./python -m perf timeit -v \
-s "from collections import namedtuple; P = namedtuple('P', 'x y'); p = P(1, 2)" \
--duplicate 1024 "p.x"
Result:
Mean +- std dev: [ref] 32.8 ns +- 0.8 ns -> [patch] 40.4 ns +- 1.3 ns: 1.23x slower (+23%)
|
||
|---|---|---|
| .. | ||
| clinic | ||
| stringlib | ||
| abstract.c | ||
| accu.c | ||
| boolobject.c | ||
| bytearrayobject.c | ||
| bytes_methods.c | ||
| bytesobject.c | ||
| call.c | ||
| capsule.c | ||
| cellobject.c | ||
| classobject.c | ||
| codeobject.c | ||
| complexobject.c | ||
| descrobject.c | ||
| dict-common.h | ||
| dictnotes.txt | ||
| dictobject.c | ||
| enumobject.c | ||
| exceptions.c | ||
| fileobject.c | ||
| floatobject.c | ||
| frameobject.c | ||
| funcobject.c | ||
| genobject.c | ||
| iterobject.c | ||
| listobject.c | ||
| listsort.txt | ||
| lnotab_notes.txt | ||
| longobject.c | ||
| memoryobject.c | ||
| methodobject.c | ||
| moduleobject.c | ||
| namespaceobject.c | ||
| object.c | ||
| obmalloc.c | ||
| odictobject.c | ||
| rangeobject.c | ||
| README | ||
| setobject.c | ||
| sliceobject.c | ||
| structseq.c | ||
| tupleobject.c | ||
| typeobject.c | ||
| typeslots.inc | ||
| typeslots.py | ||
| unicodectype.c | ||
| unicodeobject.c | ||
| unicodetype_db.h | ||
| weakrefobject.c | ||
Source files for various builtin objects