का उपयोग कर एक weakref
उपयोग करने के लिए एक डेकोरेटर नहीं संशोधित कोशिश कर के बिना __get__ के माध्यम से __iadd__ लागू, मैं निम्नलिखित व्यवहार भर में ठोकर खाई उम्मीद है कि दोनों मामले समान व्यवहार करेंगे। इसके अलावा, संदर्भ गिनती और ऑब्जेक्ट आजीवन की मेरी समझ से, मुझे विश्वास था कि दोनों मामलों में वस्तु मुक्त होनी चाहिए।मेमोरी रिसाव जब अस्थायी
मैं दोनों python2.7 और python3.3 पर यह परीक्षण किया है।
यह एक बग या जानबूझकर व्यवहार है? क्या दोनों कॉल अपेक्षित परिणाम प्राप्त करने का कोई तरीका है (वस्तु को प्रश्न में मुक्त करें)?
मैं proxy
में एक weakref
उपयोग करने के लिए, क्योंकि इस बाध्य तरीकों के लिए सही वस्तु जीवन अर्थ विज्ञान नष्ट कर देता है नहीं करना चाहती:
a = A()
descr = a.descr
del a # a is kept alive since descr is a bound method to a
descr() # should execute a.descr() as expected
दरअसल, जोड़ने 'gc.collect()' 'is_leaky' वृत्तीय संदर्भ टूट जाता है और कारण बनता है' is_leaky (test2) 'झूठी वापस जाने के लिए करने के लिए। – unutbu
हां, a.descr .__ iadd __ (ऑब्जेक्ट()) के लिए test2 को बदलने के परिणामस्वरूप दूसरी झूठी होती है। – BartoszKP
वाह। यह सूक्ष्म है। डिस्क्रिप्टर को एनओपी '__set__' जोड़ना समस्या को हल करता है। आपका बहुत बहुत धन्यवाद! – coldfix