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

Thu gom rác bằng Python

Quản lý bộ nhớ Python là thẳng về phía trước. Bạn không cần phải lo lắng về việc quản lý bộ nhớ, vì việc phân bổ và phân bổ bộ nhớ là tự động. một trong những cơ chế quản lý bộ nhớ là thu gom rác. Hãy hiểu các khía cạnh khác nhau của việc thu gom rác thải,

Thu gom rác thải

Đây là quá trình làm sạch bộ nhớ máy tính dùng chung hiện đang được đưa vào sử dụng bởi một chương trình đang chạy khi chương trình đó không còn cần bộ nhớ đó nữa. Với tính năng thu gom rác, bộ nhớ đã giải phóng đó có thể được chương trình khác sử dụng.

Có hai phương pháp được python sử dụng để quản lý bộ nhớ -

  • Đếm tham chiếu
  • Thu gom rác

Tính năng thu gom rác của Python là tự động nhưng trong một số ngôn ngữ lập trình, bạn phải tự dọn dẹp các đối tượng. Trong python, nếu muốn, bạn có thể xóa các đối tượng theo cách thủ công.

>>> x = 9
>>> print(x)
9
>>> del x
>>> print(x)
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in <module>
      print(x)
NameError: name 'x' is not defined

Ở trên, chúng ta chỉ cần xác định một biến (x) và sử dụng nó. Trong thời gian chạy, chúng tôi xóa đối tượng (vì mọi thứ trong python đều là đối tượng) và cố gắng xuất nó.

Trong hai dòng đầu tiên của chương trình trên, đối tượng x đã biết. Tuy nhiên, sau khi xóa đối tượng (x), chúng tôi không thể in nó nữa.

Vì vậy, từ trên cao, chúng ta có thể thấy rằng việc thu gom rác hoàn toàn tự động và chúng ta không cần phải lo lắng về điều đó. Hãy hiểu khái niệm trên với một ví dụ khác. Mọi đối tượng trong python như trong đoạn mã trên, đối tượng x có số lượng tham chiếu và con trỏ đến một kiểu.

Giá trị thay đổi số lượng tham chiếu phụ thuộc vào cách chúng ta đang sử dụng nó, ví dụ:nếu chúng ta gán đối tượng x cho một đối tượng khác y, thì số lượng tham chiếu của nó sẽ tăng lên 2.

>>> some_list = [1, 2 ,3, 4, 5, 6, 7, 8, 9]
>>> #Reference count of some_list = 1
>>> other_list = some_list
>>> #Reference count = 2
>>> #This will also increases if we pass the object as an assignment
>>> list_total = sum(some_list)
>>> # If we put the object in a list, reference count will also increase
>>> list_of_list = [some_list, some_list, some_list]
>>>
>>> #Let's check the reference count of object "some_list"
>>> import sys
>>> sys.getrefcount(some_list)
6

Trên đây là một ví dụ điển hình để hiểu cách đếm tham chiếu của quản lý bộ nhớ trong python. Chúng tôi tạo một đối tượng “some_list” (số tham chiếu =1), chúng tôi gán nó cho một đối tượng khác (ref. Count =2), chúng tôi đặt đối tượng làm đối số (ref. Count =3) và sau đó chúng tôi đặt đối tượng vào một danh sách nơi mà sự xuất hiện của đối tượng là ba lần (ref. count =6). Sau đó, khi chúng tôi cố gắng lấy số lượng tham chiếu của đối tượng “some_list”, chúng tôi nhận được 6.

>>> import sys
>>> sys.getrefcount(some_list)
6
>>>
>>> del list_of_list
>>> sys.getrefcount(some_list)
3
>>> del some_list
>>> sys.getrefcount(some_list)
Traceback (most recent call last):
   File "<pyshell#17>", line 1, in <module>
      sys.getrefcount(some_list)
NameError: name 'some_list' is not defined