Tôi đang viết một trò chơi nền tảng đơn giản, và tôi thấy rằng khi loại bỏ các trường hợp 'ma', chúng vẫn tồn tại và không được thu gom rác. Dường như mặc dù tôi đang loại bỏ tất cả các tài liệu tham khảo, các đối tượng ma có một số loại tài liệu tham khảo nội bộ đang ngăn cản chúng được thu thập rác thải. Cụ thể là chúng có các thuộc tính là các công tắc phương thức.tham chiếu nội bộ ngăn chặn việc thu gom rác
Các mã sau minh họa vấn đề của tôi:
import weakref
weak_ghosts = weakref.WeakKeyDictionary()
class Ghost(object):
def __init__(self):
#pass
self.switch = {'eat':self.eat, 'sleep':self.sleep}
def eat(self):
pass
def sleep(self):
pass
ghost = Ghost()
weak_ghosts[ghost] = None
#ghost.switch = {} # uncomment this line and ghost is successfully removed
del ghost
print "number of ghosts =", len(weak_ghosts)
#output:
number of ghosts = 1
Câu hỏi:
- thực sự là gì đang xảy ra?
- Tôi nên làm gì để tránh tình trạng này?
- Tôi có sử dụng phương pháp đúng để tạo từ điển có thể chuyển đổi các phương pháp không?
Nhưng sau đó nhớ chuyển đối tượng một cách rõ ràng khi thực sự gọi chúng –