2012-11-25 52 views
7

Trình thông dịch Python có xử lý các trường hợp trong đó một cá thể đối tượng xóa tham chiếu cuối cùng về chính nó không?Đối tượng xóa tham chiếu đến tự

xem xét như sau (phải thừa nhận là vô dụng) mô-đun:

all_instances = [] 

class A(object): 
    def __init__(self): 
     global all_instances 
     all_instances.append(self) 

    def delete_me(self): 
     global all_instances 
     self.context = "I'm still here" 
     all_instances.remove(self) 
     print self.context 

và bây giờ sử dụng:

import the_module 
a = the_module.A() 
the_deletion_func = a.delete_me 
del a 
the_deletion_func() 

này vẫn sẽ in I'm still here, nhưng là có một điều kiện chủng tộc với thu gom rác của Python là sắp thu thập cá thể đối tượng?
Tham chiếu đến chức năng của đối tượng có lưu được ngày không?
Trình thông dịch có giữ tham chiếu tới đối tượng có mã hiện đang thực thi cho đến khi nó kết thúc không?

Trả lời

6

Không, không có bất kỳ điều kiện chủng tộc nào như vậy. Bạn đang xóa tham chiếu, do đó, số đếm ref giảm xuống 1 và đối tượng sẽ được xóa sạch sau khi bạn xóa tham chiếu phương thức.

Các điểm tham chiếu the_deletion_func cho một phương pháp, trỏ đến trường hợp (cũng như lớp), vì vậy vẫn có một tham chiếu ở đó.

Phương pháp hiện đang thực hiện có một biến cục bộ self, cũng là tham chiếu đến cá thể, nhưng chủ yếu là trình bao bọc phương thức cung cấp tham chiếu đó.

Các vấn đề liên quan