Python tự động xóa object không cần thiết (built-in type hoặc class instance) để giải phóng memory. Quá trình Python định kỳ giải phóng và thu hồi block memory không còn dùng gọi là Garbage Collection.
Garbage collector chạy khi chương trình thực thi, kích hoạt khi reference count của object về 0. Reference count thay đổi khi số alias trỏ đến object thay đổi.
- Tăng: gán tên mới, đặt vào container (list, tuple, dict)
- Giảm:
del, gán lại reference, reference ra khỏi scope
Ví dụ reference count
a = 40 # Tạo object <40> b = a # Tăng ref count của <40> c = [b] # Tăng ref count của <40> del a # Giảm ref count b = 100 # Giảm ref count c[0] = -1 # Giảm ref count → object <40> bị collect
Class có thể implement __del__() (destructor) - gọi khi instance sắp bị destroy. Dùng để dọn dẹp non-memory resource.
Ví dụ __del__
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __del__(self):
class_name = self.__class__.__name__
print(class_name, "destroyed")
pt1 = Point()
pt2 = pt1
pt3 = pt1
print(id(pt1), id(pt2), id(pt3)) # Cùng id
del pt1
del pt2
del pt3 # "Point destroyed" in ra lúc này
Kết quả
3083401324 3083401324 3083401324 Point destroyed