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

Phá hủy đối tượng (thu gom rác) bằng Python

Python tự động xóa các đối tượng không cần thiết (các kiểu tích hợp sẵn hoặc các thể hiện lớp) để giải phóng không gian bộ nhớ. Quá trình Python 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à 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ố 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 một đối tượng tăng lên khi nó được gán một tên mới hoặc được đặt trong một 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

Lưu ý - Tốt nhất, bạn nên xác định các lớp của mình trong tệp riêng biệt, sau đó bạn nên nhập chúng vào tệp chương trình chính của mình bằng cách sử dụng câu lệnh nhập.