2009-02-04 15 views

उत्तर

42

gc मॉड्यूल, कचरा कलेक्टर हिम्मत करने के लिए इंटरफ़ेस का उपयोग करना, आप gc.get_referrers(foo) फोन सब कुछ foo की चर्चा करते हुए की एक सूची प्राप्त कर सकते हैं।

इसलिए, len(gc.get_referrers(foo)) आपको उस सूची की लंबाई देगा: रेफरर्स की संख्या, जो आप के बाद हैं।

gc module documentation भी देखें।

import sys 
sys.getrefcount(object) #-- Returns the reference count of the object. 

आम तौर पर 1 से अधिक आप वस्तु आर्ग अस्थायी संदर्भ की वजह से उम्मीद कर सकते हैं:

+7

यह भी उल्लेख किया जाना चाहिए कि गणना +1 होगी, क्योंकि जीसी सूची वस्तु को भी संदर्भित करती है। –

+1

मुझे लगता है कि @Dan कि जवाब सही है: >>> आयात जीसी >>> वर्ग बार(): ... पारित ... >>> ख = बार() >>> लेन (gc.get_referrers (बी)) >>> gc.get_referrers (बी) [{'बी': <__ मुख्य__.बार उदाहरण 0x7f1f010d0e18>, 'बार': <वर्ग __main__.Bar 0x7f1f010d6530 पर>>, '__builtins__': <मॉड्यूल '__builtin__' (अंतर्निर्मित)>, '__package__': कोई नहीं, 'gc': , '__name__': '__main__', '__doc__': कोई नहीं}] – Havok

+0

@ tehvan का उत्तर ('sys.getrefcount (ऑब्जेक्ट)') 'len (gc.get_referrers (foo)) से अधिक सरल है, यदि आपको वास्तव में केवल संख्या की आवश्यकता है। एंड्रॉइड के qpython3 में – moi

55

अजगर documentation के अनुसार, sys मॉड्यूल एक समारोह में शामिल है।

+0

आधिकारिक दस्तावेज़ीकरण से लिंक करें: https://docs.python.org/2/library/sys.html#sys.getrefcount – moi

3

gc.get_referrers() और sys.getrefcount() है। लेकिन, यह देखना मुश्किल है कि कैसे sys.getrefcount(X) पारंपरिक संदर्भ गिनती के उद्देश्य को पूरा कर सकता है। पर विचार करें:

import sys 

def function(X): 
    sub_function(X) 

def sub_function(X): 
    sub_sub_function(X) 

def sub_sub_function(X): 
    print sys.getrefcount(X) 

फिर function(SomeObject) बचाता है '7',
sub_function(SomeObject) उद्धार '5',
sub_sub_function(SomeObject) बचाता है '3', और
sys.getrefcount(SomeObject) उद्धार '2'।

दूसरे शब्दों में: यदि आप sys.getrefcount() का उपयोग करते हैं तो आपको फ़ंक्शन कॉल गहराई से अवगत होना चाहिए। gc.get_referrers() के लिए किसी को संदर्भकर्ताओं की सूची फ़िल्टर करना पड़ सकता है।

मैं मैनुअल संदर्भ को "परिवर्तन पर अलगाव" जैसे उद्देश्यों के लिए प्रस्तावित करता हूं, यानी "क्लोन अगर कहीं और संदर्भित किया गया है"।

संबंधित मुद्दे

 संबंधित मुद्दे