The short version
The list
- 1
What's the difference between a list, a tuple, and a set in Python?
List: mutable, ordered, allows duplicates, uses []. Tuple: immutable, ordered, allows duplicates, uses (). Set: mutable, unordered, no duplicates, uses {}. Performance: sets give O(1) membership check vs lists' O(n).
Why it matters: Asked at ~85% of Pune Python fresher rounds. Mention NamedTuple + dataclass(frozen=True) as senior-fresher signals.
Best for: First-pass language fundamentals screening.
- 2
Explain Python's mutable vs immutable types.
Immutable (int, float, str, tuple, frozenset) — cannot be changed after creation; operations create new objects. Mutable (list, dict, set, bytearray) — can be modified in place. Practical impact: immutables are safe as dict keys + thread-safe; mutables aren't.
Why it matters: Asked at ~70% of Pune rounds. Common follow-up: 'why is `def f(x=[]):` an anti-pattern?' (mutable default — shared across all calls).
Best for: Demonstrating Python mental model depth.
- 3
What's the difference between deep copy and shallow copy?
Shallow copy (copy.copy or list[:]) duplicates the outer container but inner references stay shared. Deep copy (copy.deepcopy) recursively duplicates everything. Test with a nested list — modify an inner element in the shallow copy, see it change in the original; not so for deep copy.
Why it matters: Asked at ~55% of Pune rounds. Common gotcha: '=' is NEITHER shallow NOR deep — it's a reference binding.
Best for: Memory model + reference semantics question.
- 4
Explain list comprehensions with an example.
Concise syntactic way to build a list by applying an expression to each element of an iterable, optionally filtered. Syntax: [expression for item in iterable if condition]. Example: [x*x for x in range(10) if x % 2 == 0] = squares of even numbers. Sister comprehensions for sets {} and dicts {k: v for ...}.
Why it matters: Asked at ~75% of Pune rounds. Mention generator expressions ((x*x for x in range(10))) for memory efficiency on large iterables.
Best for: Pythonic-idioms screen; expected fluency.
- 5
What's a decorator and when would you use one?
A decorator is a function that takes another function and extends its behaviour without modifying its source code. Common use cases: logging, timing, caching (@lru_cache), authentication (@login_required), retry logic. Implementation: a wrapper function that calls the original. Pattern: `def decorator(func): def wrapper(*args, **kwargs): ... return wrapper`.
Why it matters: Asked at ~60% of Pune rounds. Walk through writing a @timer decorator on the whiteboard if asked.
Best for: Higher-order function understanding; common Django middleware question.
- 6
What's the difference between a list and a generator?
List stores all elements in memory; generator produces elements lazily one at a time. Generators use yield in a function or generator expressions ((x for x in range(10))). Trade-off: lists can be iterated multiple times; generators only once. Use generators for large/infinite sequences where memory matters.
Why it matters: Asked at ~50% of Pune rounds, especially data + AI tracks. Mention itertools as a standard-library source of generator-based utilities.
Best for: Memory + iteration semantics; common data-pipeline question.
- 7
Explain *args and **kwargs.
*args collects positional arguments as a tuple; **kwargs collects keyword arguments as a dict. Pattern: `def my_func(*args, **kwargs):`. Used for flexible function signatures + forwarding to another function (`other_func(*args, **kwargs)`). The names are convention — you can use *positional / **keyword names but stick with the convention.
Why it matters: Asked at ~55% of Pune rounds. Common follow-up: 'forwarding kwargs to a function that doesn't accept them' (use **kwargs unpacking + signature inspection).
Best for: Function-signature flexibility question.
- 8
What is the GIL (Global Interpreter Lock)?
CPython's mechanism that allows only one thread to execute Python bytecode at a time. Implication: pure-Python multithreading doesn't give CPU-bound speedup (use multiprocessing instead). Threads are still useful for I/O-bound work (network calls, file I/O) where the GIL is released during system calls.
Why it matters: Asked at ~45% of Pune rounds, especially product company + backend tracks. Mention Python 3.13+ optional no-GIL build as cutting-edge awareness.
Best for: Concurrency understanding; differentiates beyond services-major tier.
- 9
What's the difference between __init__ and __new__ in a class?
__new__ creates and returns the new instance (rarely overridden; mostly relevant for immutable types or metaclasses). __init__ initialises the already-created instance (set attributes, validate state) and returns None. The flow: __new__ runs first, then __init__ on the returned instance.
Why it matters: Asked at ~30% of Pune rounds, mostly product company + OOP-focused interviews. Often a follow-up to 'design a Singleton in Python' — use __new__ to return the same instance every time.
Best for: OOP depth + design-pattern signal.
- 10
How does Python handle errors? Explain try/except/finally/else.
try wraps risky code; except catches specific exceptions; else runs if no exception was raised; finally always runs (cleanup, releasing resources). Practical use: catch specific exception types (ValueError, IOError) rather than bare except. Modern Python uses context managers (`with open(...) as f:`) for cleanup rather than try/finally.
Why it matters: Asked at ~50% of Pune rounds. Common follow-up: 'create a custom exception' — subclass Exception or a more specific built-in.
Best for: Error-handling discipline screen.
How we built this list
Questions ranked by interview-frequency data from Archer Infotech's 17-year placement-cell debriefs across Pune services majors (Persistent, Capgemini, Mindtree, Tech Mahindra, Cognizant) and product companies + AI-native firms (Druva, ZS Associates, Tiger Analytics, Persistent Avaamo, Helpshift, GUVI). Frequencies reflect 2024-2026 cycles; older Python 2 specifics + tkinter / curses GUI questions have been deprioritised as they no longer appear at fresher tier.
Related guides
Browse all Pune IT career guides.
FAQs
Common questions about python interview qs.
Are these questions enough to clear a Pune Python fresher interview?
Necessary but not sufficient. These 10 cover ~70% of Pune Python fundamentals screens. For backend roles, you'll also need to know Django or Flask basics + REST + SQLAlchemy. For data roles, Pandas + NumPy + basic statistics. For AI roles, LangChain + LLM API patterns. The fundamentals here + role-specific depth is the working baseline.
How do Pune Python interviews differ by track (backend vs data vs AI)?
Backend (Django/FastAPI): expect deeper REST + ORM + middleware + decorator questions. Data: expect Pandas + NumPy + SQL + statistics fundamentals layered on top. AI engineer: expect LangChain + LLM API patterns + vector stores + RAG concepts. All three start from the same Python fundamentals (the questions above) and diverge into specialisation depth.
What's the most-failed Python question at Pune fresher interviews?
Mutable default arguments. Candidates know lists are mutable but miss the `def f(x=[]):` trap — the default list is shared across all calls because it's evaluated once at function definition, not on each call. Fix: `def f(x=None): if x is None: x = []`. This question separates surface-level Python knowledge from real mental-model depth.
Do I need to know async/await for Pune Python fresher interviews?
Services-major tier: no, sync Python is sufficient. Product company tier (especially FastAPI shops + AI startups): yes, basic async/await + asyncio understanding is increasingly expected. Add asyncio basics after solid sync Python foundation; it's 1-2 weeks of focused learning that materially improves product-company-targeted interview signal.
Pune IT careers — monthly briefing
Hiring updates, salary movements, and an employer spotlight every month. Free.
One email per month. No spam. Unsubscribe anytime.