Ссылка
нажмите — покажем
нажмите — покажем
🐍 В CPython одно чтение `__dict__` может навсегда замедлить доступ к атрибутам конкретного объекта.
Начиная с Python 3.11 обычный obj.x часто вообще не делает lookup по словарю. После прогрева интерпретатор специализирует LOAD_ATTR, а значение читается почти напрямую из inline storage объекта.
Но достаточно выполнить:
`obj.__dict__`
или:
`vars(obj)`
а в некоторых случаях даже:
`copy.copy(obj)`
— и __dict__ материализуется. После этого объект теряет быстрый специализированный путь на оставшееся время жизни.
На CPython 3.14.6 в тесте на M3:
обычный объект → 33.0 ms
после чтения __dict__ → 50.6 ms
В free-threaded сборке разрыв ещё больше:
34.0 ms → 59.4 ms.
Интересная деталь: __slots__ сам по себе почти не ускоряет обычный attribute access. Его преимущество здесь в другом — у объекта нет __dict__, значит его невозможно случайно материализовать и сбить оптимизацию.
Очень неочевидная причина, почему vars() или copy.copy() внутри hot path могут неожиданно ударить по производительности.
https://deadlovelll.github.io/2026-09-05-reading-dict-deoptimizes-attribute-access/
@Python_Community_ru
329 ·