Top 50 Python Interview Questions & Answers for 2025
Basic Python Questions (1–15)
1. What is Python, and why is it so popular?
Answer: Python is a high-level, interpreted programming language known for its readable syntax and versatility. It’s used in web development, data science, automation, AI, and more. Its popularity comes from its simplicity (great for beginners), vast libraries (like NumPy, Pandas, and Django), and cross-platform support. Plus, companies like Google and Netflix love it for its flexibility
2. How do you install Python?
Answer: Download the latest Python version from python.org (Python 3.13.3 as of April 2025). Run the installer, ensure “Add Python to PATH” is checked, and follow the prompts. Verify installation by typing python –version in your terminal or command prompt. Easy peasy!
3. What are Python’s key features?Answer: Python is:
- Readable: Clean, English-like syntax.
- Interpreted: No need for a compiler; code runs line-by-line.
- Dynamically Typed: No need to declare variable types.
- Cross-Platform: Works on Windows, macOS, Linux.
- Rich Libraries: Tons of tools for data science, web dev, and AI.
4. What is the difference between Python 2 and Python 3?
Answer: Python 2 is outdated (end-of-life in 2020), while Python 3 is the current standard. Key differences:
- Python 3 uses print() as a function (Python 2 uses print as a statement).
- Python 3 treats strings as Unicode by default (str type).
- Python 3 has better integer division (e.g., 3/2 returns 1.5, not 1 like Python 2). Always use Python 3 for new projects!
5. What are variables in Python?
Answer: Variables are like containers that store data (numbers, strings, lists, etc.). You create them by assigning a value, like name = “Alice”. Python doesn’t require you to declare the type, making it super flexible.
6. What is the difference between a list and a tuple?
Answer: A list is mutable (you can change it), while a tuple is immutable (you can’t). Example:
python
my_list = [1, 2, 3]
my_list[0] = 100 # Works
my_tuple = (1, 2, 3)
my_tuple[0] = 100 # Error!
Lists use [], tuples use (). Tuples are faster for fixed data.
7. What is a dictionary in Python?
Answer: A dictionary stores key-value pairs, like a real dictionary maps words to meanings. Example:
python
my_dict = {"name": "Alice", "age": 25}
print(my_dict["name"]) # Outputs: Alice
It’s super useful for quick lookups
8. What are Python’s built-in data types?
Answer: Common ones include:
- Numbers: int (5), float (3.14), complex (3j+10).
- Strings: “Hello”.
- Lists: [1, 2, 3].
- Tuples: (1, 2, 3).
- Dictionaries: {“key”: “value”}.
- Sets: {“a”, “b”, “c”}.
9. What is the difference between == and is?
Answer: == checks if two values are equal, while is checks if they’re the same object in memory. Example:
python
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True (same values)
print(a is b) # False (different objects)
10. What is a Python module?
Answer: A module is a Python file with functions, classes, or variables you can import and use. Example:
python
import math
print(math.sqrt(16)) # Outputs: 4.0
Modules help keep code organized and reusable.
11. How do you handle exceptions in Python?
Answer: Use try and except blocks to catch errors gracefully:
python
try:
result = 10 / 0
except ZeroDivisionError:
print("Can’t divide by zero!")
finally:
print("This always runs.")
This prevents your program from crashing.
12. What is the global keyword?
Answer: It lets you modify a global variable inside a function. Example:
python
x = 10
def change_x():
global x
x = 20
change_x()
print(x) # Outputs: 20
Without global, Python treats x as local.
13. What is a list comprehension?Answer: A concise way to create lists. Instead of a loop, you write it in one line:
python
squares = [x * x for x in range(5)] # [0, 1, 4, 9, 16]
It’s cleaner and often faster than loops.
14. What is the len() function?
Answer: It returns the number of items in an object, like a list or string:
python
my_list = [1, 2, 3]
print(len(my_list)) # Outputs: 3
print(len("hello")) # Outputs: 5
Super handy for checking sizes
15. What is PEP 8?
Answer: PEP 8 is Python’s style guide for writing clean, readable code. It suggests things like using 4 spaces for indentation, keeping lines under 79 characters, and naming variables clearly (e.g., my_variable instead of myVariable). Following PEP 8 makes your code look pro!Intermediate Python Questions (16–30)
16. What is the Global Interpreter Lock (GIL)?
Answer: The GIL is a mutex in CPython that ensures only one thread runs Python bytecode at a time, even on multi-core systems. It simplifies memory management but limits multi-core performance for CPU-bound tasks. Python 3.13.3’s free-threaded mode (experimental) removes the GIL for better parallelism.
17. What are decorators in Python?
Answer: Decorators are functions that modify another function’s behavior without changing its code. They’re often used for logging or access control:
python
def my_decorator(func):
def wrapper():
print("Something before")
func()
print("Something after")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
# Outputs: Something before
# Hello!
# Something after
The @ symbol is shorthand for applying the decorator.
18. What is the difference between a shallow copy and a deep copy?
Answer: A shallow copy creates a new object but shares references to nested objects. A deep copy creates a fully independent copy, including nested objects:
python
import copy
lst = [[1, 2], 3]
shallow = copy.copy(lst)
deep = copy.deepcopy(lst)
shallow[0][0] = 100 # Changes lst too
deep[0][0] = 200 # Doesn’t affect lst
19. What is a lambda function?
Answer: A lambda function is a small, anonymous function defined with lambda. Example:
python
double = lambda x: x * 2
print(double(5)) # Outputs: 10
It’s great for one-off tasks, like sorting or filtering
.20. What is the map() function?
Answer: map() applies a function to every item in an iterable:
python
numbers = [1, 2, 3]
squares = list(map(lambda x: x * x, numbers)) # [1, 4, 9]
It’s a clean way to transform data.
21. What is the difference between append() and extend()?
Answer: append() adds a single element to a list, while extend() adds all elements from an iterable:
python
lst = [1, 2]
lst.append([3, 4]) # [1, 2, [3, 4]]
lst = [1, 2]
lst.extend([3, 4]) # [1, 2, 3, 4]
22. What are *args and **kwargs?
Answer: *args collects extra positional arguments into a tuple, and **kwargs collects extra keyword arguments into a dictionary:
python
def greet(*args, **kwargs):
print(args) # Tuple of positional args
print(kwargs) # Dictionary of keyword args
greet("Hello", "World", name="Alice")
# Outputs: ('Hello', 'World')
# {'name': 'Alice'}
23. What is a generator in Python?
Answer: A generator yields values one at a time, saving memory. Use yield instead of return:
python
def my_gen():
for i in range(3):
yield i
for num in my_gen():
print(num) # Outputs: 0, 1, 2
Great for handling large datasets
24. What is the zip() function?
Answer: zip() combines multiple iterables into tuples:
python
names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages):
print(name, age) # Alice 25, Bob 30
Perfect for pairing data.
25. What is the difference between a set and a list?
Answer: A set is unordered, mutable, and only stores unique elements (no duplicates). A list is ordered, mutable, and allows duplicates:
python
my_set = {1, 2, 2} # {1, 2}
my_list = [1, 2, 2] # [1, 2, 2]
26. What is the join() method for strings?
Answer: join() combines a list of strings into one string, using a separator:
python
words = ["Hello", "World"]
result = " ".join(words) # "Hello World"
It’s faster than concatenating with +.
27. What are access modifiers in Python?
Answer: Python uses naming conventions for access control:
- Public: variable (accessible everywhere).
- Protected: _variable (intended for subclasses).
- Private: __variable (accessible only within the class). Example:
python
class MyClass:
def __init__(self):
self.public = "I’m public"
self._protected = "I’m protected"
self.__private = "I’m private"
28. What is the functools.lru_cache decorator?
Answer: It caches function results to speed up repeated calls with the same inputs:
python
from functools import lru_cache
@lru_cache(maxsize=128)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
print(fib(10)) # Faster due to caching
Great for expensive computations.
29. What is a virtual environment?
Answer: A virtual environment isolates Python projects to avoid library conflicts:
python
python -m venv myenv
source myenv/bin/activate # On Windows: myenv\Scripts\activate
pip install numpy
It keeps your project’s dependencies separate.
30. What is the re module for regular expressions?
Answer: The re module lets you work with patterns in strings:
python
import re
pattern = r"ab{4,8}"
print(re.search(pattern, "aabbbbbc")) # Matches
It’s useful for text parsing and validation.
Advanced Python Questions (31–40)
31. What is inheritance in Python?
Answer: Inheritance lets a class (child) inherit attributes and methods from another class (parent):
python
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
dog = Dog()
print(dog.speak()) # Woof!
It promotes code reuse.
32. What is method overloading?
Answer: Python doesn’t support traditional method overloading (same method name with different parameters). Instead, use default arguments or *args:
python
def add(*args):
return sum(args)
print(add(1, 2)) # 3
print(add(1, 2, 3)) # 6
33. What is the __init__ method?
Answer: It’s a constructor that runs when you create a class instance:
python
class Person:
def __init__(self, name):
self.name = name
p = Person("Alice")
print(p.name) # Alice
It sets up initial attributes.
34. What is a metaclass?
Answer: A metaclass is a class that defines how classes are created. It’s advanced stuff, often used for framework development:
python
class MyMeta(type):
pass
class MyClass(metaclass=MyMeta):
pass
Think of it as a “class factory.”
35. What is the difference between __str__ and __repr__?
Answer: __str__ returns a user-friendly string representation, while __repr__ returns a developer-friendly one:
python
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person: {self.name}"
def __repr__(self):
return f"Person('{self.name}')"
p = Person("Alice")
print(str(p)) # Person: Alice
print(repr(p)) # Person('Alice')
36. What is a context manager?
Answer: A context manager handles setup and cleanup using with statements:
python
with open("file.txt", "w") as f:
f.write("Hello!")
# File is automatically closed
It’s great for managing resources like files or database connections.
37. What is the asyncio module?
Answer: asyncio enables asynchronous programming for tasks like I/O operations:
python
import asyncio
async def say_hello():
await asyncio.sleep(1)
print("Hello!")
asyncio.run(say_hello())
It’s key for writing scalable code in 2025.
38. What is a RESTful API, and how do you use Python for it?
Answer: A RESTful API uses HTTP methods (GET, POST, etc.) for communication. In Python, use Flask or FastAPI:
python
from flask import Flask
app = Flask(__name__)
@app.route("/hello", methods=["GET"])
def hello():
return {"message": "Hello, World!"}
Run the app, and clients can access /hello.
39. What are Python’s memory management techniques?
Answer: Python uses:
- Private Heap: All objects are stored in a private memory space.
- Reference Counting: Tracks object references; deletes when count hits zero.
- Garbage Collection: Handles circular references.
- Memory Pools: Allocates small objects efficiently.
40. What is the enum module?Answer: The enum module defines enumerated types for fixed sets of values:
python
from enum import Enum
class Color(Enum):
RED = 1
BLUE = 2
print(Color.RED) # Color.RED
It’s great for readability and preventing invalid values.Coding Problems (41–50)41. Write a function to check if a number is even.
Answer:
python
def is_even(num):
return num % 2 == 0
print(is_even(4)) # True
print(is_even(5)) # False
Explanation: Use the modulo operator % to check if a number is divisible by 2.
42. Write a function to calculate the factorial of a number.
Answer:
python
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
print(factorial(5)) # 120
Explanation: Use recursion to multiply numbers from 1 to n.
43. Write a function to reverse a string.
Answer:
python
def reverse_string(s):
return s[::-1]
print(reverse_string("hello")) # olleh
Explanation: Python’s slicing with [::-1] reverses the string efficiently.44. Write a function to check if a string is a palindrome.
Answer:
python
def is_palindrome(s):
s = s.lower().replace(" ", "")
return s == s[::-1]
print(is_palindrome("A man a plan a canal Panama")) # True
Explanation: Normalize the string (lowercase, remove spaces) and compare it to its reverse.45. Write a function to find the maximum of three numbers.
Answer:
python
def max_of_three(a, b, c):
return max(a, b, c)
print(max_of_three(1, 2, 3)) # 3
Explanation: Use Python’s built-in max() function for simplicity.
46. Write a function to count vowels in a string.
Answer:
python
def count_vowels(s):
return sum(1 for char in s.lower() if char in "aeiou")
print(count_vowels("Hello World")) # 3
Explanation: Use a list comprehension to count characters in the vowel set.
47. Write a function to merge two sorted lists.
Answer:
python
def merge_sorted_lists(lst1, lst2):
result = []
i, j = 0, 0
while i < len(lst1) and j < len(lst2):
if lst1[i] < lst2[j]:
result.append(lst1[i])
i += 1
else:
result.append(lst2[j])
j += 1
result.extend(lst1[i:])
result.extend(lst2[j:])
return result
print(merge_sorted_lists([1, 3, 5], [2, 4, 6])) # [1, 2, 3, 4, 5, 6]
Explanation: Compare elements and build a sorted result list.48. Write a function to find the largest palindromic number in a list.
Answer:
python
def is_palindrome(n):
return str(n) == str(n)[::-1]
def largest_palindrome(arr):
return max((x for x in arr if is_palindrome(x)), default=-1)
print(largest_palindrome([121, 232, 54545, 999990])) # 999990
Explanation: Filter palindromes and find the maximum.
49. Write a function to convert a list to a dictionary with indices as keys.
Answer:
python
def list_to_dict(lst):
return {i: val for i, val in enumerate(lst)}
print(list_to_dict(["a", "b", "c"])) # {0: 'a', 1: 'b', 2: 'c'}
Explanation: Use enumerate() to pair indices with values.50. Write a function to check if two strings are anagrams.
Answer:
python
from collections import Counter
def is_anagram(str1, str2):
return Counter(str1.lower()) == Counter(str2.lower())
print(is_anagram("listen", "silent")) # True
Explanation: Use Counter to compare character frequencies.