Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để thu thập rác hoạt động trong Python?


Python tự động xóa các đối tượng không mong muốn (các kiểu hoặc phiên bản lớp được tích hợp sẵn) để giải phóng không gian bộ nhớ. Quá trình Python giải phóng và lấy lại định kỳ các khối bộ nhớ không còn được sử dụng nữa được gọi là Garbage Collection.

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ố lượng tham chiếu của đối tượng bằng không. Số lượng tham chiếu của một đối tượng thay đổi khi số lượng bí danh trỏ đến nó thay đổi.

Số lượng tham chiếu của đối tượng tăng lên khi nó được gán tên mới hoặc được đặt trong vùng chứa (danh sách, bộ hoặc từ điển). Số lượng tham chiếu của đối tượng giảm khi nó bị xóa bằng del, tham chiếu của nó được gán lại hoặc tham chiếu của nó vượt ra ngoài phạm vi. Khi số lượng tham chiếu của một đối tượng bằng 0, Python sẽ tự động thu thập nó.

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>

Thông thường, bạn sẽ không nhận thấy khi trình thu gom rác phá hủy một cá thể mồ côi và lấy lạ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 __ (), được gọi là hàm hủy, được gọi khi cá thể sắp bị hủy. Phương pháp này có thể được sử dụng để dọn dẹp mọi tài nguyên không phải bộ nhớ được sử dụng bởi một phiên bản.

Ví dụ

Hàm hủy __del __ () này in ra tên lớp của một cá thể 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) # prints the ids of the obejcts
del pt1
del pt2
del pt3

Đầu ra

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau -

3083401324 3083401324 3083401324
Point destroyed