Objects in Python go through a life from creation to removal. Understanding this helps you manage memory and program behavior better.
Object lifecycle overview in Python
Start learning this pattern below
Jump into concepts and practice - no test required
class ClassName: def __init__(self): # called when object is created pass def __del__(self): # called when object is about to be destroyed pass
__init__ is the constructor method called when an object is created.
__del__ is the destructor method called when an object is about to be removed.
class Car: def __init__(self): print('Car created') def __del__(self): print('Car destroyed') my_car = Car()
class Book: def __init__(self, title): self.title = title print(f'Book "{self.title}" created') def __del__(self): print(f'Book "{self.title}" destroyed') novel = Book('Python Guide')
This program creates a Person object, does some work, then deletes the object explicitly to show the destruction message.
class Person: def __init__(self, name): self.name = name print(f'Person {self.name} created') def __del__(self): print(f'Person {self.name} destroyed') p = Person('Alice') print('Doing some work...') del p print('End of program')
Python automatically removes objects when no references point to them.
The __del__ method is not guaranteed to run immediately when you delete an object.
Use del to remove references, but Python's garbage collector decides when to free memory.
Objects are created with __init__ and destroyed with __del__.
Understanding object lifecycle helps manage resources and memory.
Python handles most cleanup automatically, but you can control it when needed.
Practice
Solution
Step 1: Understand object lifecycle start
The lifecycle of a Python object begins when it is created in memory.Step 2: Differentiate from other lifecycle stages
Deletion and garbage collection happen later, after creation and use.Final Answer:
Creation of the object in memory -> Option AQuick Check:
Object lifecycle starts with creation [OK]
- Confusing creation with deletion
- Thinking garbage collection happens first
- Assuming variable assignment is the first step
Solution
Step 1: Recall destructor method name
In Python, the destructor method is named __del__ with double underscores before and after.Step 2: Check syntax correctness
The correct syntax is def __del__(self): which matches Python's special method naming.Final Answer:
def __del__(self): -> Option BQuick Check:
Destructor method = __del__ [OK]
- Using wrong method names like destructor or delete
- Missing double underscores
- Confusing with constructor __init__
class MyClass:
def __init__(self):
print('Created')
def __del__(self):
print('Deleted')
obj = MyClass()
print('Object in use')
del obj
print('End')Solution
Step 1: Trace object creation and constructor call
When obj = MyClass() runs, __init__ prints 'Created'.Step 2: Follow print and deletion order
Next, 'Object in use' prints. Then del obj calls __del__, printing 'Deleted'. Finally, 'End' prints.Final Answer:
Created\nObject in use\nDeleted\nEnd -> Option AQuick Check:
Constructor then prints, then destructor after del [OK]
- Assuming destructor runs immediately after creation
- Ignoring order of print statements
- Thinking del obj skips destructor
class Sample:
def __init__(self):
print('Init called')
def __del__(self):
print('Del called')
obj = Sample()
obj = None
print('Done')Solution
Step 1: Understand what happens when obj is set to None
Setting obj = None removes the reference to the Sample object, so it becomes eligible for garbage collection.Step 2: Confirm destructor call behavior
When no references remain, __del__ is called, so 'Del called' will print before 'Done'.Final Answer:
No error; destructor will be called when obj is set to None -> Option CQuick Check:
Destructor runs when object has no references [OK]
- Thinking setting variable to None skips destructor
- Confusing syntax errors with lifecycle behavior
- Assuming constructor is skipped
class Item:
def __init__(self, name):
self.name = name
print(f'Created {name}')
def __del__(self):
print(f'Deleted {self.name}')
def create_items():
items = [Item('a'), Item('b'), Item('c')]
print('Items created')
create_items()
print('Function ended')Solution
Step 1: Analyze object references inside function
Objects are stored in the list 'items' inside create_items(). They exist until the function ends.Step 2: Determine when objects lose references
When create_items() finishes, 'items' list is destroyed, removing references to objects, triggering destructors.Step 3: Confirm output order
So, 'Items created' prints, then function ends, then destructors print, then 'Function ended' prints.Final Answer:
Destructors called after 'Function ended' when function scope ends -> Option DQuick Check:
Objects destroyed after function scope ends [OK]
- Thinking destructors run immediately after creation
- Assuming list keeps objects alive forever
- Confusing print order with destructor timing
