Python ลบอ็อบเจ็กต์ที่ไม่จำเป็น (built-in types หรือ class instances) อัตโนมัติเพื่อปล่อยพื้นที่หน่วยความจำ กระบวนการที่ Python เรียกคืนบล็อกหน่วยความจำที่ไม่ได้ใช้แล้วเป็นระยะเรียกว่า Garbage Collection (การเก็บขยะ)
Garbage collector ของ Python ทำงานระหว่างการรันโปรแกรมและถูกทริกเกอร์เมื่อ reference count ของอ็อบเจ็กต์ถึงศูนย์ Reference count ของอ็อบเจ็กต์เปลี่ยนแปลงตามจำนวน alias ที่ชี้ไปยันมัน
Reference count ของอ็อบเจ็กต์เพิ่มขึ้นเมื่อถูกกำหนดชื่อใหม่หรือวางในคอนเทนเนอร์ (list, tuple, หรือ dictionary) Reference count ของอ็อบเจ็กต์ลดลงเมื่อถูกลบด้วย del reference ถูกกำหนดใหม่ หรือ reference ไปข้างนอก scope เมื่อ reference count ของอ็อบเจ็กต์ถึงศูนย์ Python จะเก็บมันอัตโนมัติ
a = 40 # สร้างอ็อบเจ็กต์ <40>
b = a # เพิ่ม ref. count ของ <40>
c = [b] # เพิ่ม ref. count ของ <40>
del a # ลด ref. count ของ <40>
b = 100 # ลด ref. count ของ <40>
c[0] = -1 # ลด ref. count ของ <40>
คุณปกติจะไม่สังเกตเมื่อ garbage collector ทำลายอินสแตนซ์ที่เป็นเด็กกำพร้าและเรียกคืนพื้นที่ของมัน แต่วิธีพิเศษ __del__() เรียกว่า destructor จะถูกเรียกเมื่ออินสแตนซ์กำลังจะถูกทำลาย เมธอดนี้อาจใช้ทำความสะอาดทรัพยากรที่ไม่ใช่หน่วยความจำที่อินสแตนซ์ใช้
ตัวอย่าง
Destructor __del__() นี้พิมพ์ชื่อคลาสของอินสแตนซ์ที่กำลังจะถูกทำลาย:
#!/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) # พิมพ์ ids ของอ็อบเจ็กต์
del pt1
del pt2
del pt3
ผลลัพธ์ (Output)
เมื่อรันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้:
3083401324 3083401324 3083401324
Point destroyed
หมายเหตุ - ควรกำหนดคลาสในไฟล์แยก แล้วนำเข้าในไฟล์โปรแกรมหลักด้วยคำสั่ง import