Python tự động xóa các đối tượng không còn cần thiết (kiểu built-in hoặc instance của lớp) để giải phóng không gian bộ nhớ. Quá trình Python định kỳ thu hồi các khối bộ nhớ không còn được sử dụng được gọi là Garbage Collection (Thu gom rác).
Bộ thu gom rác của Python chạy trong quá trình thực thi chương trình và được kích hoạt khi số tham chiếu của một đối tượng đạt về không. Số tham chiếu của đối tượng thay đổi khi số lượng bí danh (aliases) trỏ đến nó thay đổi.
Số tham chiếu của đối tượng tăng khi nó được gán tên mới hoặc đặt trong một container (list, tuple, hoặc dictionary). Số tham chiếu giảm khi nó bị xóa bằng del, tham chiếu được gán lại, hoặc tham chiếu ra khỏi phạm vi. Khi số tham chiếu đạt về không, Python tự động thu gom nó.
a = 40 # Tạo đối tượng <40> b = a # Tăng số tham chiếu của <40> c = [b] # Tăng số tham chiếu của <40> del a # Giảm số tham chiếu của <40> b = 100 # Giảm số tham chiếu của <40> c[0] = -1 # Giảm số tham chiếu của <40>
Bạn thường sẽ không nhận thấy khi bộ thu gom rác hủy một instance mồ côi và thu hồi không gian của nó. Nhưng một lớp có thể triển khai phương thức đặc biệt __del__(), gọi là destructor, được gọi khi instance sắp bị hủy. Phương thức này có thể được dùng để dọn dẹp các tài nguyên không phải bộ nhớ được sử dụng bởi instance.
Ví dụ
Destructor __del__() này in tên lớp của instance sắp bị hủy:
#!/usr/bin/python
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) # in id của các đối tượng
del pt1
del pt2
del pt3
Kết quả
Khi mã trên được thực thi, nó cho kết quả sau:
3083401324 3083401324 3083401324 Point destroyed
Lưu ý - Tốt nhất bạn nên định nghĩa các lớp trong file riêng, sau đó import chúng vào file chương trình chính sử dụng câu lệnh import.