Python is tested in interviews across an enormous range of roles: backend engineering, data engineering, machine learning, DevOps scripting, and automation. The good news is that the core Python topics tested are consistent. The same questions about generators, decorators, the GIL, and object-oriented patterns come up whether you are interviewing at a startup or a large tech company.
This guide covers the Python concepts most frequently tested in technical interviews, with explanations and examples designed to help you give clear, confident answers, not just recall definitions.
1. Python Data Structures: Lists, Tuples, Sets, and Dicts
Interviewers often start with "what is the difference between a list and a tuple?" The key distinctions go beyond mutability:
- List, mutable, ordered, allows duplicates, O(n) search, supports all sequence operations.
- Tuple, immutable, ordered, hashable (so usable as dict keys and set members), slightly faster for iteration.
- Set, mutable, unordered, no duplicates, O(1) average lookup.
frozensetis immutable. - Dict, mutable key-value mapping, O(1) average lookup and insert, ordered by insertion since Python 3.7.
x in s) on a set is O(1); on a list it is O(n). If you are checking membership frequently against a large collection, convert to a set first.2. Generators and Iterators
Generators are one of Python's most powerful features and come up regularly in interviews for data and backend roles.
# Regular function, builds entire list in memory
def get_squares(n):
return [x ** 2 for x in range(n)]
# Generator function, yields one value at a time
def gen_squares(n):
for x in range(n):
yield x ** 2
# Generator expression (lazy list comprehension)
squares = (x ** 2 for x in range(1_000_000))
# All three produce the same values, but the generator
# uses O(1) memory regardless of n.Generators implement the iterator protocol automatically, they have__iter__ and __next__ methods. The yield keyword suspends the function, saves its state, and resumes where it left off on the next call to next().
3. Decorators
A decorator is a higher-order function: it accepts a function as input, wraps it with additional behavior, and returns the modified function. Python's @ syntax is syntactic sugar.
import functools
import time
def timer(func):
@functools.wraps(func) # preserves func's __name__ and __doc__
def wrapper(*args, **kwargs):
start = time.perf_counter()
result = func(*args, **kwargs)
elapsed = time.perf_counter() - start
print(f"{func.__name__} ran in {elapsed:.4f}s")
return result
return wrapper
@timer
def slow_operation():
time.sleep(0.1)
return "done"
slow_operation() # slow_operation ran in 0.1001s@functools.wraps(func) inside your decorator. Without it, the wrapped function loses its original __name__, __doc__, and other attributes , which breaks introspection tools and documentation generators.4. Object-Oriented Python: Dunder Methods and MRO
Interviewers regularly ask about Python's data model, specifically dunder (double underscore) methods that customize class behavior.
__init__, called when an instance is created (not the constructor, that's__new__).__repr__, unambiguous developer representation; used in the REPL.__str__, human-readable representation; used byprint().__len__,__getitem__, make your class behave like a sequence.__enter__/__exit__, implement the context manager protocol.__eq__,__hash__, equality and hashing (always define both together).
For multiple inheritance, Python uses the C3 linearization algorithm (Method Resolution Order, MRO) to determine which method to call. Use ClassName.__mro__ or help(ClassName) to inspect the resolution order.
5. Concurrency: Threading, Multiprocessing, and asyncio
This topic distinguishes intermediate from senior Python candidates.
- threading, shares memory, uses OS threads, limited by the GIL for CPU-bound work but effective for I/O-bound tasks.
- multiprocessing, spawns separate Python processes each with their own GIL, enabling true CPU parallelism at the cost of higher memory use and IPC overhead.
- asyncio, single-threaded cooperative concurrency via event loop and
async/await; ideal for high-concurrency I/O-bound workloads (web servers, database clients, HTTP calls).
6. Most Common Python Interview Questions
- What is the difference between
isand==in Python? - What are mutable and immutable types? Give examples.
- How does Python manage memory? (Reference counting + cyclic GC.)
- What is a list comprehension? How does it differ from a generator expression?
- What is the difference between
@staticmethodand@classmethod? - Explain Python's GIL. When does it matter?
- What is the difference between
deepcopyand shallow copy? - How does
withwork? Write a class that supports the context manager protocol.