__del__() là destructor method. Được gọi khi object bị garbage collected - xảy ra sau khi tất cả reference đến object bị xóa.
- Trường hợp đơn giản: ngay sau
del xhoặc biến local hết scope khi function kết thúc. - CPython (implementation chuẩn) garbage collect ngay lập tức nếu không có circular reference.
- Chỉ đảm bảo: GC xảy ra sau khi tất cả reference bị xóa - có thể không ngay lập tức, thậm chí không bao giờ.
Lý do object sống lâu
- Exception đang propagate giữ reference
- Module introspection
- Circular reference (CPython GC định kỳ phá vỡ hầu hết nhưng không phải tất cả)
Use case hợp lệ
class X:
def __init__(self, y):
self.y = y
global_cache['X->Y'] = y # Cache toàn cục
def __del__(self):
# Dọn dẹp cache entry
global_cache.pop('X->Y', None)
Lưu ý: Nếu cleanup bắt buộc, hãy gọi trực tiếp x.__del__() hoặc dùng context manager (with), try/finally, weakref.finalize.