Query the archive
Find the right depth.
Filter the notebook by what you know, how much time you have, and where you want to go next.
49 matching notes
| The fastest operation is the one your algorithm avoids | intermediate | 32 min | 3.10+ | Performance, Algorithms |
| Allocation is work: object churn and memory locality | advanced | 31 min | 3.10+ | Performance, Internals |
| Asyncio cancellation is part of your API | advanced | 30 min | 3.11+ | Concurrency, API Design |
| Attribute lookup, from dot to descriptor | advanced | 31 min | 3.10+ | Internals, Object Model |
| How to benchmark Python without lying to yourself | intermediate | 28 min | 3.10+ | Performance, Tooling |
| Callable objects and function-like behavior | advanced | 26 min | 3.10+ | Object Model, Functions |
| Circular imports are partially initialized modules | advanced | 32 min | 3.14 | Internals, Architecture |
| Closures capture cells, not frozen values | advanced | 30 min | 3.10+ | Internals, Functions |
| What compile() actually produces | advanced | 31 min | 3.10+ | Internals, Language |
| Containers are bundles of protocols | advanced | 26 min | 3.10+ | Object Model, Data Structures |
| Context managers encode cleanup | intermediate | 25 min | 3.10+ | Object Model, Standard Library |
| super() is a cooperative MRO machine | advanced | 30 min | 3.10+ | Internals, Object Model |
| Inside CPython's allocator | advanced | 32 min | 3.10+ | Internals, Memory |
| Crossing the Python boundary | advanced | 33 min | 3.10+ | Performance, Internals |
| Deque, heap, and bisect: choosing the non-obvious container | advanced | 31 min | 3.10+ (3.14+ for max-heaps) | Internals, Data Structures |
| Exceptions are control flow with machinery | advanced | 33 min | 3.14 | Internals, Language |
| Finalization is where simple models fail | advanced | 31 min | 3.10+ | Internals, Memory |
| Finders, loaders, module specs, and import hooks | advanced | 34 min | 3.14 | Internals, Tooling |
| Fixtures are a dependency graph | intermediate | 32 min | 3.10+ | Testing |
| Frames, locals, globals, and builtins | advanced | 32 min | 3.14 | Internals, Language |
| Function calls and vectorcall | advanced | 31 min | 3.14 | Internals, Performance |
| Reference counting and cyclic garbage collection | advanced | 33 min | 3.10+ | Internals, Memory |
| How classes are built | advanced | 32 min | 3.10+ | Internals, Object Model |
| Import state, module caches, and test isolation | advanced | 32 min | 3.10+ | Testing, Internals |
| Lists are dynamic arrays, not generic sequences | advanced | 32 min | 3.10+ | Internals, Data Structures |
| Names are part of the design | intermediate | 25 min | 3.10+ | Craft, API Design |
| Names are references, but that slogan is not enough | advanced | 30 min | 3.10+ | Internals, Memory |
| Patch where the name is looked up | intermediate | 31 min | 3.10+ | Testing, Object Model |
| Building plugin discovery without directory-scanning hacks | advanced | 33 min | 3.14 | Architecture, Packaging |
| Processes make serialization part of the design | advanced | 32 min | 3.11+ | Concurrency, Architecture |
| Profile first: finding where the time actually went | intermediate | 30 min | 3.10+ | Performance, Tooling |
| Protocols beat inheritance | advanced | 29 min | 3.10+ | Architecture, Object Model |
| Reading bytecode without cargo culting it | advanced | 31 min | 3.14 | Internals, Tooling |
| Sets: dictionaries with different tradeoffs | advanced | 33 min | 3.10+ | Internals, Data Structures |
| What __slots__ really changes | advanced | 29 min | 3.10+ | Internals, Object Model |
| What CPython's specializing interpreter optimizes for you | advanced | 30 min | 3.14 | Performance, Internals |
| Strings are Unicode storage strategies | advanced | 35 min | 3.10+ | Internals, Data Structures |
| Structural typing meets runtime protocols | advanced | 27 min | 3.10+ | Typing, Object Model |
| sys.modules and the truth about import caching | advanced | 31 min | 3.10+ | Internals, Language |
| Task groups and failure propagation | advanced | 31 min | 3.11+ | Concurrency, Error Handling |
| Testing concurrency and cancellation without timing roulette | advanced | 32 min | 3.11+ | Testing, Concurrency |
| Threads, tasks, and processes solve different waits | advanced | 31 min | 3.11+ | Concurrency, Architecture |
| Stop writing loops when a transformation says more | intermediate | 25 min | 3.10+ | Craft, Data Processing |
| Tuples, records, and the cost of shape | advanced | 36 min | 3.10+ | Internals, Data Structures |
| Weak references and caches that can let go | advanced | 30 min | 3.10+ | Internals, Memory |
| How Python dictionaries actually remember | advanced | 34 min | 3.10+ | Internals, Data Structures |
| Escape the nested-if pyramid | beginner | 15 min | 3.10+ | Craft |
| The GIL, without the folklore | advanced | 32 min | 3.13+ | Internals, Concurrency |
| Iterators change the question | intermediate | 24 min | 3.10+ | Object Model, Standard Library |