Detailed Answers for Python Programming - Question 18
Q18 (a): Discuss about Memory Management in Python
Python's memory management is automatic and efficient, including:
1. Memory Allocation:
- Python uses a private heap to store all objects and data structures.
- This is managed by the Python memory manager.
2. Object-Specific Allocators:
- Used for small and frequently used objects like integers and lists.
3. Reference Counting:
- Each object has a reference count.
- When it drops to zero, memory is automatically deallocated.
Example:
import sys
x = "hello"
print(sys.getrefcount(x))
4. Garbage Collection:
- Detects and collects objects involved in reference cycles.
- The gc module controls garbage collection.
Example:
import gc
gc.collect()
5. Memory Pooling:
- Python uses pymalloc for efficient memory allocation of small objects.
6. Dynamic Typing:
- Memory is allocated at runtime based on object type.
7. Modules:
- sys (for reference counts), gc (for garbage collection)
Q18 (b): Explain the Concepts of Operator Overloading in Python. Give an Example
Operator Overloading allows operators to have different meanings based on context.
How it works:
- Define special methods in a class like __add__, __sub__, etc.
Example:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Point(self.x + other.x, self.y + other.y)
def __str__(self):
return f"({self.x}, {self.y})"
p1 = Point(2, 3)
p2 = Point(4, 5)
p3 = p1 + p2
print(p3) # Output: (6, 8)
Common Overload Methods:
+ => __add__
- => __sub__
* => __mul__
== => __eq__
< => __lt__
> => __gt__
Benefits:
- Makes code readable and intuitive
- Allows custom objects to behave like built-in types