Python – Top 25 interview questions

Sure! Here are the top 25 interview questions for Python, along with detailed answers and relevant examples.

1. What are Python’s key features?

Answer:
Python is known for its simplicity and readability, making it a popular choice for both beginners and experienced developers. Key features include:

  • Easy to Learn and Use: Python’s syntax is clear and intuitive.
  • Interpreted Language: Python code is executed line by line, which makes debugging easier.
  • Dynamic Typing: Types are determined at runtime, not in advance.
  • Expressive Language: Python allows complex operations to be expressed concisely.
  • Extensive Standard Library: Python has a rich set of modules and libraries to handle various tasks.
  • Portability: Python can run on different operating systems with minimal changes.
  • Open Source: Python is free to use and distribute, even for commercial purposes.

2. Explain the difference between a list and a tuple in Python.

Answer:

  • List: Mutable, meaning elements can be changed, added, or removed.
  my_list = [1, 2, 3]
  my_list[0] = 4  # [4, 2, 3]
  my_list.append(5)  # [4, 2, 3, 5]
  • Tuple: Immutable, meaning once defined, elements cannot be changed, added, or removed.
  my_tuple = (1, 2, 3)
  # my_tuple[0] = 4  # Raises a TypeError

3. How does Python handle memory management?

Answer:
Python uses automatic memory management, which includes:

  • Reference Counting: Each object maintains a count of references pointing to it. When the count reaches zero, the memory is deallocated.
  • Garbage Collection: Python’s garbage collector (gc) removes objects that are no longer referenced to free up memory. It handles cyclic references (objects referring to each other) which reference counting alone can’t resolve.

4. What is a Python decorator and how is it used?

Answer:
A decorator is a function that adds functionality to another function or method without modifying its structure.

def my_decorator(func):
    def wrapper():
        print("Something before the function.")
        func()
        print("Something after the function.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()
# Output:
# Something before the function.
# Hello!
# Something after the function.

5. Explain the difference between *args and **kwargs.

Answer:

  • *args: Allows a function to accept any number of positional arguments.
  def func(*args):
      for arg in args:
          print(arg)

  func(1, 2, 3)
  # Output:
  # 1
  # 2
  # 3
  • **kwargs: Allows a function to accept any number of keyword arguments.
  def func(**kwargs):
      for key, value in kwargs.items():
          print(f"{key}: {value}")

  func(name="Alice", age=30)
  # Output:
  # name: Alice
  # age: 30

6. What are Python’s built-in data types?

Answer:
Python has several built-in data types:

  • Numeric Types: int, float, complex
  a = 10      # int
  b = 3.14    # float
  c = 1 + 2j  # complex
  • Sequence Types: list, tuple, range
  my_list = [1, 2, 3]  # list
  my_tuple = (1, 2, 3) # tuple
  my_range = range(5)  # range
  • Mapping Type: dict
  my_dict = {"key": "value"}
  • Set Types: set, frozenset
  my_set = {1, 2, 3}        # set
  my_frozenset = frozenset([1, 2, 3])
  • Text Type: str
  my_str = "Hello"
  • Boolean Type: bool
  my_bool = True
  • Binary Types: bytes, bytearray, memoryview
  my_bytes = b"Hello"          # bytes
  my_bytearray = bytearray(5)  # bytearray
  my_memoryview = memoryview(my_bytes)

7. What is the difference between __str__ and __repr__ methods?

Answer:

  • __str__: Returns a string representation of the object, intended to be readable.
  class MyClass:
      def __str__(self):
          return "This is a user-friendly string representation."

  obj = MyClass()
  print(str(obj))  # Output: This is a user-friendly string representation.
  • __repr__: Returns an unambiguous string representation of the object, intended for debugging and development.
  class MyClass:
      def __repr__(self):
          return "MyClass()"

  obj = MyClass()
  print(repr(obj))  # Output: MyClass()

8. How do you handle exceptions in Python?

Answer:
Exceptions in Python are handled using try, except, else, and finally blocks.

try:
    # Code that may raise an exception
    result = 10 / 0
except ZeroDivisionError:
    print("Cannot divide by zero.")
else:
    print("No exceptions occurred.")
finally:
    print("This block always executes.")

9. What is a lambda function?

Answer:
A lambda function is an anonymous function defined with the lambda keyword. It can have any number of parameters but only one expression.

add = lambda x, y: x + y
print(add(2, 3))  # Output: 5

10. Explain list comprehensions and provide an example.

Answer:
List comprehensions provide a concise way to create lists. They consist of brackets containing an expression followed by a for clause.

squares = [x**2 for x in range(10)]
print(squares)  # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

11. What are generators in Python?

Answer:
Generators are functions that return an iterable set of items, one at a time, in a special way using the yield statement.

def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
for value in gen:
    print(value)
# Output:
# 1
# 2
# 3

12. What is the difference between deepcopy and copy?

Answer:

  • copy: Creates a shallow copy of an object. Only the top-level objects are duplicated.
  import copy
  original = [1, 2, [3, 4]]
  shallow_copy = copy.copy(original)
  shallow_copy[2][0] = 5
  print(original)  # Output: [1, 2, [5, 4]]
  • deepcopy: Creates a deep copy of an object. All levels of the objects are duplicated.
  deep_copy = copy.deepcopy(original)
  deep_copy[2][0] = 6
  print(original)  # Output: [1, 2, [5, 4]]

13. How do you handle file operations in Python?

Answer:
File operations are handled using the open function and the context manager to ensure proper resource management.

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

with open('example.txt', 'w') as file:
    file.write("Hello, World!")

14. What is the Global Interpreter Lock (GIL)?

Answer:
The GIL is a mutex that protects access to Python objects, preventing multiple native threads from executing Python bytecodes simultaneously. This means that Python threads are not truly concurrent, making multi-threading less effective for CPU-bound tasks but still useful for I/O-bound tasks.

15. Explain the use of the with statement in Python.

Answer:
The with statement simplifies exception handling and ensures that cleanup code is executed. It’s often used with file operations.

with open('example.txt', 'r') as file:
    content = file.read()
    print(content)
# The file is automatically closed after the block.

16. What are Python’s built-in types for sequences?

Answer:
Python has several built-in types for sequences, including:

  • List: Mutable, ordered sequence of elements.
  my_list = [1, 2, 3]

17. What is a metaclass in Python?

Answer:
A metaclass is a class of a class that defines how a class behaves. A class is an instance of a metaclass. Metaclasses allow you to intercept class creation, modify class definitions, and customize class behavior.

class Meta(type):
    def __new__(cls, name, bases, dct):
        print(f'Creating class {name}')
        return super().__new__(cls, name, bases, dct)

class MyClass(metaclass=Meta):
    pass

# Output:
# Creating class MyClass

18. How can you handle multiple exceptions in a single except block?

Answer:
You can handle multiple exceptions by specifying a tuple of exception types in the except block.

try:
    # Code that may raise different exceptions
    result = 10 / 0
except (ZeroDivisionError, TypeError) as e:
    print(f"An error occurred: {e}")

19. What are Python’s built-in types for sets?

Answer:
Python has two built-in types for sets:

  • Set: An unordered collection of unique elements.
  my_set = {1, 2, 3}
  • Frozenset: An immutable version of a set.
  my_frozenset = frozenset([1, 2, 3])

20. How does Python implement multithreading?

Answer:
Python implements multithreading using the threading module. However, due to the Global Interpreter Lock (GIL), true parallelism is not achieved in CPU-bound tasks. Multithreading is useful for I/O-bound tasks.

import threading

def print_numbers():
    for i in range(5):
        print(i)

thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()

21. What is the difference between is and == in Python?

Answer:

  • is: Checks if two references point to the same object (identity).
  a = [1, 2, 3]
  b = a
  print(a is b)  # Output: True
  • ==: Checks if the values of two objects are equal (equality).
  c = [1, 2, 3]
  d = [1, 2, 3]
  print(c == d)  # Output: True
  print(c is d)  # Output: False

22. What is the use of the map() function in Python?

Answer:
The map() function applies a given function to all items in an iterable and returns a map object (which is an iterator).

def square(x):
    return x * x

numbers = [1, 2, 3, 4]
squared_numbers = map(square, numbers)
print(list(squared_numbers))  # Output: [1, 4, 9, 16]

23. How do you create a virtual environment in Python?

Answer:
You can create a virtual environment using the venv module in Python.

python -m venv myenv

To activate the virtual environment:

  • On Windows:
  myenv\Scripts\activate
  • On macOS/Linux:
  source myenv/bin/activate

24. What are list comprehensions and how do they work?

Answer:
List comprehensions provide a concise way to create lists using an expression inside square brackets.

squares = [x**2 for x in range(10)]
print(squares)  # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

List comprehensions can include conditions to filter elements.

even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # Output: [0, 4, 16, 36, 64]

25. What are the different ways to read a file in Python?

Answer:
You can read a file in Python using various methods:

  • Read the entire file:
  with open('example.txt', 'r') as file:
      content = file.read()
      print(content)
  • Read file line by line:
  with open('example.txt', 'r') as file:
      for line in file:
          print(line, end='')
  • Read file into a list:
  with open('example.txt', 'r') as file:
      lines = file.readlines()
      print(lines)

These questions and answers should give a comprehensive understanding of Python, suitable for a variety of interview contexts.

Scroll to Top