Everyone "knows Python." Far fewer can explain why a = a + [1] and a += [1] aren't the same thing. This is the path from the first group to the second.

Here's the uncomfortable thing about Python interviews: the language is so friendly that it lets you get away with not understanding it for years. You can ship working code, pass code review, and ship more code, all while quietly believing that is and == are basically the same and that a default argument of [] is a perfectly innocent idea.

Then you sit down across from someone who asks, "What happens when two threads append to the same list?" and the friendliness evaporates.

The problem usually isn't effort. It's order. People study Python like they're browsing a buffet, grabbing decorators on Monday, async on Tuesday, metaclasses on a caffeine-fueled Wednesday, and somehow never learning what a name actually is. So here's a roadmap that goes in the order the language was meant to be understood, fundamentals first, party tricks last.

(If you'd rather click through it than read about it, the whole thing is laid out as an interactive track here, with progress that fills in as you go. But the reasoning matters more than the clicking, so let's walk it.)