Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การรวบรวมขยะทำงานใน Python อย่างไร


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