-
-
Notifications
You must be signed in to change notification settings - Fork 33.4k
Closed
Closed
Copy link
Labels
Description
Documentation
The following two calls look similar, but the second is dramatically slow compared to the first:
from typing import SupportsInt
isinstance(3, int)
isinstance(3, SupportsInt)The reason for the slowness is because of _ProtocolMeta.__instancecheck__, which makes calling isinstance() against any runtime-checkable protocol pretty slow. It's possible we can find ways of optimising _ProtocolMeta.__instancecheck__, but whatever we do, it is likely to remain substantially slower to call isinstance() against runtime-checkable protocols than it is to call isinstance() against "normal" classes. This is often pretty surprising for users, so one of the consensus points in python/typing#1363 was that this should be better documented.
Linked PRs
- gh-102936: typing: document performance pitfalls of protocols decorated with
@runtime_checkable#102937 - [3.11] gh-102936: typing: document performance pitfalls of protocols decorated with
@runtime_checkable(GH-102937) #102963 - [3.10] gh-102936: typing: document performance pitfalls of protocols decorated with
@runtime_checkable(GH-102937) #102964