Python จะลบวัตถุที่ไม่ต้องการ (ประเภทในตัวหรืออินสแตนซ์ของคลาส) โดยอัตโนมัติเพื่อเพิ่มพื้นที่หน่วยความจำ กระบวนการที่ Python ปล่อยว่างและเรียกคืนบล็อกของหน่วยความจำที่ไม่ได้ใช้แล้วเป็นระยะๆ เรียกว่า Garbage Collection
ตัวรวบรวมขยะของ Python ทำงานระหว่างการทำงานของโปรแกรมและถูกทริกเกอร์เมื่อจำนวนการอ้างอิงของวัตถุถึงศูนย์ จำนวนการอ้างอิงของออบเจ็กต์เปลี่ยนไปตามจำนวนนามแฝงที่ชี้ไปที่การเปลี่ยนแปลง
จำนวนการอ้างอิงของออบเจ็กต์จะเพิ่มขึ้นเมื่อมีการกำหนดชื่อใหม่หรือวางไว้ในคอนเทนเนอร์ (รายการ ทูเพิล หรือพจนานุกรม) จำนวนการอ้างอิงของออบเจ็กต์ลดลงเมื่อถูกลบด้วย del การอ้างอิงถูกกำหนดใหม่ หรือการอ้างอิงอยู่นอกขอบเขต เมื่อจำนวนการอ้างอิงของวัตถุถึงศูนย์ Python จะรวบรวมโดยอัตโนมัติ
a = 40 # Create object <40> b = a # Increase ref. count of <40> c = [b] # Increase ref. count of <40> del a # Decrease ref. count of <40> b = 100 # Decrease ref. count of <40> c[0] = -1 # Decrease ref. count of <40>
โดยปกติคุณจะไม่สังเกตเห็นเมื่อตัวรวบรวมขยะทำลายอินสแตนซ์ที่ถูกละเลยและเรียกคืนพื้นที่ แต่คลาสสามารถใช้เมธอดพิเศษ __del__() ที่เรียกว่า 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) # prints the ids of the obejcts del pt1 del pt2 del pt3
ผลลัพธ์
เมื่อโค้ดด้านบนถูกรัน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
3083401324 3083401324 3083401324 Point destroyed