[{"data":1,"prerenderedAt":331},["ShallowReactive",2],{"roadmap-python":3},{"framework":4,"title":7,"description":8,"model":9},{"slug":5,"name":6},"python","Python","Python Learning Roadmap","A guided path through Python for interviews — from language fundamentals to concurrency, internals and testing. Work top to bottom, mark questions as you master them, and the roadmap tracks how far you've come.",{"stages":10,"topicCount":328,"subtopicCount":329,"questionCount":330},[11,119,191,268],{"name":12,"summary":13,"topics":14,"gaps":117,"questionCount":118},"Foundations","Start here. The core data model every other topic builds on — values and mutability, the built-in containers, looping, and how functions behave.",[15,46,72,94],{"slug":16,"name":17,"description":18,"subtopics":19,"questionCount":45},"fundamentals","Fundamentals","Mutability, data types and common Python gotchas that come up in nearly every Python interview.",[20,26,31,37,41],{"path":21,"subtopic":22,"difficulty":23,"questionCount":24,"blogPath":25},"\u002Fpython\u002Ffundamentals\u002Fmutability","Mutability & Data Types","medium",33,"\u002Fblog\u002Fpython-mutability-mutable-immutable-types",{"path":27,"subtopic":28,"difficulty":23,"questionCount":29,"blogPath":30},"\u002Fpython\u002Ffundamentals\u002Fscope-legb","Variables, Scope & the LEGB Rule",15,"\u002Fblog\u002Fpython-scope-legb-rule-explained",{"path":32,"subtopic":33,"difficulty":34,"questionCount":35,"blogPath":36},"\u002Fpython\u002Ffundamentals\u002Fnumbers-operators","Numbers & Operators","easy",16,"\u002Fblog\u002Fpython-numbers-operators-explained",{"path":38,"subtopic":39,"difficulty":23,"questionCount":29,"blogPath":40},"\u002Fpython\u002Ffundamentals\u002Fstrings-formatting","Strings & String Formatting","\u002Fblog\u002Fpython-strings-formatting-explained",{"path":42,"subtopic":43,"difficulty":34,"questionCount":35,"blogPath":44},"\u002Fpython\u002Ffundamentals\u002Ftruthiness-conversion","Truthiness & Type Conversion","\u002Fblog\u002Fpython-truthiness-type-conversion-explained",95,{"slug":47,"name":48,"description":49,"subtopics":50,"questionCount":71},"data-structures","Data Structures","Lists, tuples, dicts and sets — Python's built-in collections, their performance trade-offs, and the collections module that extends them.",[51,55,59,63,67],{"path":52,"subtopic":53,"difficulty":23,"questionCount":29,"blogPath":54},"\u002Fpython\u002Fdata-structures\u002Flists","Lists & Slicing","\u002Fblog\u002Fpython-lists-slicing-explained",{"path":56,"subtopic":57,"difficulty":23,"questionCount":29,"blogPath":58},"\u002Fpython\u002Fdata-structures\u002Ftuples","Tuples & Named Tuples","\u002Fblog\u002Fpython-tuples-namedtuples-explained",{"path":60,"subtopic":61,"difficulty":23,"questionCount":35,"blogPath":62},"\u002Fpython\u002Fdata-structures\u002Fdictionaries","Dictionaries","\u002Fblog\u002Fpython-dictionaries-explained",{"path":64,"subtopic":65,"difficulty":23,"questionCount":35,"blogPath":66},"\u002Fpython\u002Fdata-structures\u002Fsets","Sets & Frozensets","\u002Fblog\u002Fpython-sets-frozensets-explained",{"path":68,"subtopic":69,"difficulty":23,"questionCount":35,"blogPath":70},"\u002Fpython\u002Fdata-structures\u002Fcollections-module","The collections Module","\u002Fblog\u002Fpython-collections-module-explained",78,{"slug":73,"name":74,"description":75,"subtopics":76,"questionCount":93},"iteration","Comprehensions & Iteration","List, dict and set comprehensions, generators, and the iterator protocol — Python's expressive, lazy approach to building and consuming sequences.",[77,81,85,89],{"path":78,"subtopic":79,"difficulty":23,"questionCount":29,"blogPath":80},"\u002Fpython\u002Fiteration\u002Fgenerators","Generators & yield","\u002Fblog\u002Fpython-generators-yield-explained",{"path":82,"subtopic":83,"difficulty":34,"questionCount":29,"blogPath":84},"\u002Fpython\u002Fiteration\u002Fcomprehensions","List, Dict & Set Comprehensions","\u002Fblog\u002Fpython-comprehensions-explained",{"path":86,"subtopic":87,"difficulty":23,"questionCount":29,"blogPath":88},"\u002Fpython\u002Fiteration\u002Fiterators","Iterators & the Iterator Protocol","\u002Fblog\u002Fpython-iterators-protocol-explained",{"path":90,"subtopic":91,"difficulty":34,"questionCount":29,"blogPath":92},"\u002Fpython\u002Fiteration\u002Fenumerate-zip","enumerate, zip & Unpacking","\u002Fblog\u002Fpython-enumerate-zip-unpacking-explained",60,{"slug":95,"name":96,"description":97,"subtopics":98,"questionCount":116},"functions","Functions","Arguments and unpacking, closures, decorators and higher-order functions — how Python treats functions as first-class objects.",[99,104,108,112],{"path":100,"subtopic":101,"difficulty":102,"questionCount":29,"blogPath":103},"\u002Fpython\u002Ffunctions\u002Fdecorators","Decorators","hard","\u002Fblog\u002Fpython-decorators-explained",{"path":105,"subtopic":106,"difficulty":23,"questionCount":35,"blogPath":107},"\u002Fpython\u002Ffunctions\u002Farguments","Function Arguments","\u002Fblog\u002Fpython-function-arguments-args-kwargs-explained",{"path":109,"subtopic":110,"difficulty":102,"questionCount":29,"blogPath":111},"\u002Fpython\u002Ffunctions\u002Fclosures","Closures & Scope","\u002Fblog\u002Fpython-closures-explained",{"path":113,"subtopic":114,"difficulty":23,"questionCount":29,"blogPath":115},"\u002Fpython\u002Ffunctions\u002Flambdas","Lambdas & Higher-Order Functions","\u002Fblog\u002Fpython-lambdas-higher-order-functions-explained",61,[],294,{"name":120,"summary":121,"topics":122,"gaps":189,"questionCount":190},"Core Language","The object model and program structure: classes and the MRO, the exception system, and how modules, packages and environments fit together.",[123,153,171],{"slug":124,"name":125,"description":126,"subtopics":127,"questionCount":152},"oop","Object-Oriented Programming","Classes, inheritance and the MRO, dunder methods, properties and dataclasses — object-oriented Python and its data model.",[128,132,136,140,144,148],{"path":129,"subtopic":130,"difficulty":102,"questionCount":29,"blogPath":131},"\u002Fpython\u002Foop\u002Finheritance","Inheritance & the MRO","\u002Fblog\u002Fpython-inheritance-mro-explained",{"path":133,"subtopic":134,"difficulty":34,"questionCount":29,"blogPath":135},"\u002Fpython\u002Foop\u002Fclasses","Classes, Instances & __init__","\u002Fblog\u002Fpython-classes-instances-init-explained",{"path":137,"subtopic":138,"difficulty":102,"questionCount":29,"blogPath":139},"\u002Fpython\u002Foop\u002Fdunder-methods","Dunder \u002F Magic Methods","\u002Fblog\u002Fpython-dunder-magic-methods-explained",{"path":141,"subtopic":142,"difficulty":23,"questionCount":29,"blogPath":143},"\u002Fpython\u002Foop\u002Fmethods-properties","Methods & Properties","\u002Fblog\u002Fpython-methods-properties-explained",{"path":145,"subtopic":146,"difficulty":23,"questionCount":29,"blogPath":147},"\u002Fpython\u002Foop\u002Fdataclasses-slots","Dataclasses & __slots__","\u002Fblog\u002Fpython-dataclasses-slots-explained",{"path":149,"subtopic":150,"difficulty":102,"questionCount":29,"blogPath":151},"\u002Fpython\u002Foop\u002Fabc-protocols","Abstract Base Classes & Protocols","\u002Fblog\u002Fpython-abc-vs-protocol",90,{"slug":154,"name":155,"description":156,"subtopics":157,"questionCount":170},"exceptions","Errors & Exceptions","try\u002Fexcept\u002Felse\u002Ffinally, the exception hierarchy, custom exceptions and context managers — robust error handling in Python.",[158,162,166],{"path":159,"subtopic":160,"difficulty":23,"questionCount":29,"blogPath":161},"\u002Fpython\u002Fexceptions\u002Fcontext-managers","Context Managers & with","\u002Fblog\u002Fpython-context-managers-with-explained",{"path":163,"subtopic":164,"difficulty":23,"questionCount":29,"blogPath":165},"\u002Fpython\u002Fexceptions\u002Ftry-except","try \u002F except \u002F else \u002F finally","\u002Fblog\u002Fpython-try-except-else-finally-explained",{"path":167,"subtopic":168,"difficulty":23,"questionCount":35,"blogPath":169},"\u002Fpython\u002Fexceptions\u002Fcustom-exceptions","Custom Exceptions & the Hierarchy","\u002Fblog\u002Fpython-custom-exceptions-explained",46,{"slug":172,"name":173,"description":174,"subtopics":175,"questionCount":188},"modules","Modules, Packages & Environments","The import system, packages, __main__, and virtual environments — how Python code is organized, shared and run.",[176,180,184],{"path":177,"subtopic":178,"difficulty":23,"questionCount":29,"blogPath":179},"\u002Fpython\u002Fmodules\u002Fimports","The Import System","\u002Fblog\u002Fpython-import-system-explained",{"path":181,"subtopic":182,"difficulty":23,"questionCount":29,"blogPath":183},"\u002Fpython\u002Fmodules\u002Fpackages","Packages & __main__","\u002Fblog\u002Fpython-packages-main-explained",{"path":185,"subtopic":186,"difficulty":34,"questionCount":29,"blogPath":187},"\u002Fpython\u002Fmodules\u002Fvirtual-environments","Virtual Environments & pip","\u002Fblog\u002Fpython-virtual-environments-pip-explained",45,[],181,{"name":192,"summary":193,"topics":194,"gaps":266,"questionCount":267},"Idiomatic & Typed Python","Write Python the way reviewers expect: functional tools, type hints, the standard library that ships in the box, and the idioms that mark fluency.",[195,214,228,249],{"slug":196,"name":197,"description":198,"subtopics":199,"questionCount":213},"functional","Functional Programming","map, filter and reduce, functools and itertools — composing programs from functions and lazy iterators.",[200,204,208],{"path":201,"subtopic":202,"difficulty":23,"questionCount":29,"blogPath":203},"\u002Fpython\u002Ffunctional\u002Ffunctools","functools","\u002Fblog\u002Fpython-functools-explained",{"path":205,"subtopic":206,"difficulty":23,"questionCount":35,"blogPath":207},"\u002Fpython\u002Ffunctional\u002Fmap-filter-reduce","map, filter & reduce","\u002Fblog\u002Fpython-map-filter-reduce-explained",{"path":209,"subtopic":210,"difficulty":23,"questionCount":211,"blogPath":212},"\u002Fpython\u002Ffunctional\u002Fitertools","itertools",17,"\u002Fblog\u002Fpython-itertools-explained",48,{"slug":215,"name":216,"description":217,"subtopics":218,"questionCount":227},"typing","Type Hints & Typing","Type annotations, the typing module, generics and protocols — optional static typing for modern Python.",[219,223],{"path":220,"subtopic":221,"difficulty":23,"questionCount":29,"blogPath":222},"\u002Fpython\u002Ftyping\u002Ftype-hints","Type Hints & Annotations","\u002Fblog\u002Fpython-type-hints-explained",{"path":224,"subtopic":225,"difficulty":102,"questionCount":29,"blogPath":226},"\u002Fpython\u002Ftyping\u002Fgenerics-protocols","Generics & Protocols","\u002Fblog\u002Fpython-generics-protocols-explained",30,{"slug":229,"name":230,"description":231,"subtopics":232,"questionCount":93},"stdlib","Standard Library Essentials","pathlib and os, datetime, regular expressions and JSON\u002FCSV — the batteries-included modules every Python developer reaches for.",[233,237,241,245],{"path":234,"subtopic":235,"difficulty":23,"questionCount":29,"blogPath":236},"\u002Fpython\u002Fstdlib\u002Fregex","Regular Expressions","\u002Fblog\u002Fpython-regex-explained",{"path":238,"subtopic":239,"difficulty":23,"questionCount":29,"blogPath":240},"\u002Fpython\u002Fstdlib\u002Ffiles-pathlib","Files, pathlib & os","\u002Fblog\u002Fpython-files-pathlib-explained",{"path":242,"subtopic":243,"difficulty":23,"questionCount":29,"blogPath":244},"\u002Fpython\u002Fstdlib\u002Fdatetime","datetime","\u002Fblog\u002Fpython-datetime-explained",{"path":246,"subtopic":247,"difficulty":23,"questionCount":29,"blogPath":248},"\u002Fpython\u002Fstdlib\u002Fserialization","JSON, CSV & pickle","\u002Fblog\u002Fpython-json-csv-pickle-explained",{"slug":250,"name":251,"description":252,"subtopics":253,"questionCount":188},"idioms","Pythonic Idioms","EAFP vs LBYL, PEP 8 style, and the common gotchas and anti-patterns that separate idiomatic Python from translated code.",[254,258,262],{"path":255,"subtopic":256,"difficulty":23,"questionCount":29,"blogPath":257},"\u002Fpython\u002Fidioms\u002Feafp-lbyl","EAFP vs LBYL","\u002Fblog\u002Fpython-eafp-vs-lbyl-explained",{"path":259,"subtopic":260,"difficulty":34,"questionCount":29,"blogPath":261},"\u002Fpython\u002Fidioms\u002Fpep8-style","PEP 8 & Style","\u002Fblog\u002Fpython-pep8-style-explained",{"path":263,"subtopic":264,"difficulty":23,"questionCount":29,"blogPath":265},"\u002Fpython\u002Fidioms\u002Fgotchas","Common Gotchas & Anti-patterns","\u002Fblog\u002Fpython-common-gotchas-explained",[],183,{"name":269,"summary":270,"topics":271,"gaps":324,"questionCount":327},"Advanced & Tooling","The senior-level material: concurrency and parallelism, what happens under the hood in memory and the interpreter, and testing your code with confidence.",[272,294,311],{"slug":273,"name":274,"description":275,"subtopics":276,"questionCount":293},"concurrency","Concurrency & Parallelism","Threads and the GIL, multiprocessing, asyncio and concurrent.futures — running Python code concurrently and in parallel.",[277,281,285,289],{"path":278,"subtopic":279,"difficulty":102,"questionCount":29,"blogPath":280},"\u002Fpython\u002Fconcurrency\u002Fgil","Threading & the GIL","\u002Fblog\u002Fpython-threading-vs-multiprocessing-vs-asyncio",{"path":282,"subtopic":283,"difficulty":102,"questionCount":35,"blogPath":284},"\u002Fpython\u002Fconcurrency\u002Fmultiprocessing","Multiprocessing","\u002Fblog\u002Fpython-multiprocessing-explained",{"path":286,"subtopic":287,"difficulty":102,"questionCount":35,"blogPath":288},"\u002Fpython\u002Fconcurrency\u002Fasyncio","asyncio & async\u002Fawait","\u002Fblog\u002Fpython-asyncio-async-await-explained",{"path":290,"subtopic":291,"difficulty":23,"questionCount":29,"blogPath":292},"\u002Fpython\u002Fconcurrency\u002Fconcurrent-futures","concurrent.futures","\u002Fblog\u002Fpython-concurrent-futures-explained",62,{"slug":295,"name":296,"description":297,"subtopics":298,"questionCount":188},"internals","Memory & Internals","Reference counting, garbage collection, object identity and the CPython execution model — how Python manages memory and runs your code.",[299,303,307],{"path":300,"subtopic":301,"difficulty":102,"questionCount":29,"blogPath":302},"\u002Fpython\u002Finternals\u002Fgarbage-collection","Garbage Collection & Reference Counting","\u002Fblog\u002Fpython-garbage-collection-explained",{"path":304,"subtopic":305,"difficulty":23,"questionCount":29,"blogPath":306},"\u002Fpython\u002Finternals\u002Fidentity-interning","Identity, is vs ==, & Interning","\u002Fblog\u002Fpython-is-vs-equals-equality-vs-identity",{"path":308,"subtopic":309,"difficulty":102,"questionCount":29,"blogPath":310},"\u002Fpython\u002Finternals\u002Fcpython-model","The CPython Execution Model","\u002Fblog\u002Fpython-cpython-execution-model-explained",{"slug":312,"name":313,"description":314,"subtopics":315,"questionCount":227},"testing","Testing","pytest and unittest, fixtures and mocking — writing automated tests for Python code.",[316,320],{"path":317,"subtopic":318,"difficulty":23,"questionCount":29,"blogPath":319},"\u002Fpython\u002Ftesting\u002Fpytest","pytest Essentials","\u002Fblog\u002Fpython-pytest-explained",{"path":321,"subtopic":322,"difficulty":23,"questionCount":29,"blogPath":323},"\u002Fpython\u002Ftesting\u002Fmocking","Mocking & Patching","\u002Fblog\u002Fpython-mocking-patching-explained",[325,326],"Packaging & distribution","Performance profiling & optimization",137,14,51,795,1782244083099]