मैं एक साधारण मंच गेम लिख रहा हूं, और मुझे पता चला है कि 'भूत' उदाहरणों को हटाते समय, वे बने रहते हैं और कचरे को एकत्र नहीं करते हैं। ऐसा लगता है कि हालांकि मैं सभी संदर्भों को हटा रहा हूं, भूत वस्तुओं में कुछ प्रकार के आंतरिक संदर्भ हैं जो उन्हें कचरा इकट्ठा करने से रोक रहे हैं। विशेष रूप से उनके पास गुण होते हैं जो विधि स्विच होते हैं।आंतरिक संदर्भ कचरा संग्रह
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
सवाल::
- क्या वास्तव में हो रहा है
निम्नलिखित कोड मेरी समस्या को दिखाता है?
- इस स्थिति से बचने के लिए मुझे क्या करना चाहिए?
- क्या मैं विधियों के एक स्विच करने योग्य शब्दकोश बनाने के लिए सही पद्धति का उपयोग कर रहा हूं?
लेकिन फिर वास्तव में उन्हें कॉल करते समय ऑब्जेक्ट को स्पष्ट रूप से पास करना याद रखें –