से अधिक के प्रलेखन अजगर 3.2 पुनरावृत्ति के weakref
मॉड्यूल के WeakKeyDictionary
और WeakValueDictionary
इन कंटेनरों से अधिक पुनरावृत्ति पर एक नोट है:सुरक्षित रूप से WeakKeyDictionary और WeakValueDictionary
नोट: सावधानी: क्योंकि एक WeakKeyDictionary पर बनाया गया है एक पायथन शब्दकोश के शीर्ष पर, इसे आकार देने पर आकार को बदलना नहीं चाहिए। WeakKeyDictionary के लिए यह सुनिश्चित करना मुश्किल हो सकता है क्योंकि पुनरावृत्ति के दौरान कार्यक्रम द्वारा किए गए कार्यों से शब्दकोष में "जादू द्वारा" गायब हो सकता है (कचरा संग्रह के दुष्प्रभाव के रूप में)।
यह इन कंटेनर के व्यवहार के विनिर्देश के रूप में अपेक्षाकृत गंभीर लगता है। विशेष रूप से जब कोड चलाते हैं जो सीपीथॉन के कचरा कलेक्टर (चक्र युक्त डेटा संरचनाओं का उपयोग करते समय) या अन्य पायथन कार्यान्वयन (जैसे ज्योथन) का उपयोग करते हैं, तो ऐसा लगता है कि इन संग्रहों पर पुन: प्रयास करने का कोई सुरक्षित तरीका नहीं है।
कचरा कलेक्टर मेरे कार्यक्रम में किसी भी समय संदर्भ को साफ़ कर सकता है जब मैं इन संग्रहों पर सुरक्षित रूप से पुन: सक्रिय कैसे हो सकता हूं? सीपीथन के लिए समाधान होने से मेरी प्राथमिकता है लेकिन मुझे अन्य कार्यान्वयन पर भी इस मुद्दे के बारे में दिलचस्पी है।
क्या यह शायद एक कमजोर तरीका है जो WeakKeyDictionary पर फिर से शुरू हो सकता है?
import weakref
d = weakref.WeakKeyDictionary()
...
for k, v in list(d.items()):
...
आपका पहला उदाहरण असुरक्षित क्यों होगा? सूची में प्रत्येक कुंजी और मूल्य के लिए मजबूत संदर्भ होंगे और अंतिम पुनरावृत्ति के दौरान, 'के' और' v 'में रुचि रखने वाली वस्तुओं के लिए मजबूत संदर्भ होंगे। इसलिए अंतिम पुनरावृत्ति समाप्त होने से पहले सूची कचरा भी हो सकती है। क्या वह सही है? – Feuermurmel
यह कहने जैसा है कि 'के लिए, v। Ditems() में सुरक्षित है, क्योंकि' k' और 'v' ऑब्जेक्ट्स के लिए मजबूत संदर्भ रखते हैं।अगर लूप के अंदर, 'k' और 'v' को हटाया जा सकता है, तो पुनरावृत्ति असुरक्षित है। 'WeakKeyDictionary' पर फिर से चलने वाले सरल कार्यों के लिए सुरक्षित होना चाहिए। – Bakuriu
मैं शायद कुछ गलत समझ रहा हूं, लेकिन ऑब्जेक्ट्स 'के' और' v' संदर्भ कैसे हटाया जा सकता है? जब तक ये चर गुंजाइश में हैं और अधिक नहीं हैं, संदर्भित वस्तुएं सुरक्षित हैं। या क्या आप अंतिम पुनरावृत्ति के दौरान उन वस्तुओं के सभी मजबूत संदर्भों को हटाने के बारे में बात कर रहे हैं? इससे शब्दकोश बदल जाएगा लेकिन असुरक्षित नहीं होगा क्योंकि पुनरावृत्ति शुरू होने के बाद शब्दकोश का उपयोग नहीं किया जाता है। क्या आप अंतिम पुनरावृत्ति के दौरान क्या गलत हो सकते हैं इसका एक उदाहरण दे सकते हैं? – Feuermurmel