Python: are objects more memory-hungry than dictionaries? -
पायथन 2.7.1 (r271: 86832, 27 नवंबर 2010, 18:30:46) [एमएससी वी। 1500 32 बिट (इंटेल)] पर Win32 टाइप "सहायता", "कॉपीराइट", "क्रेडिट" या अधिक जानकारी के लिए "लाइसेंस" # रैम उपयोग: 2100 & gt; & gt; & gt; वर्ग टेस्ट: ... def __init __ (आत्म, i): ... self.one = i ... self.hundred = 100 * i ... # RAM उपयोग: 2108 & gt; & gt; & gt; List1 = [एक्सरेन्ज (10000)] में # के लिए [टेस्ट (i) # रैम उपयोग: 4364 & gt; & gt; & gt; डेल (सूची 1) # रैम उपयोग: 2780 & gt; & gt; & gt; List2 = [{"एक": मैं, "सौ": 100 * i} xrange में (10000)] # रैम उपयोग: 3960 & gt; & gt; & gt; डेल (सूची 2) # रैम का उपयोग: 2908 समकक्ष शब्दकोशों की सूची के रूप में वस्तुओं की सूची दो बार जितनी मेमोरी क्यों लेती है? मैंने सोचा था कि एक ऑब्जेक्ट ज्यादा कुशल होगा क्योंकि प्रत्येक ऑब्जेक्ट के लिए एट्रिब्यूट नाम की प्रतियां स्टोर करने की कोई आवश्यकता नहीं है।
"post-text" itemprop = "text">
यदि आप पायथन में एक वर्ग को परिभाषित करते हैं (इसे सी एक्सटेंशन के रूप में लिखने का विरोध करने के बजाय) तो डिफ़ॉल्ट रूप से यह सभी विशेषताओं को संग्रहीत करने के लिए एक शब्दकोश का उपयोग करेगा यही कारण है कि यह एक शब्दकोश से छोटा होने के लिए असंभव है, और आप अधिकतर पायथन ऑब्जेक्ट के लिए मनमानी गुण क्यों दे सकते हैं।
यदि आप पहले से जानते हैं कि आपके ऑब्जेक्ट की विशेषता है, तो आप उन्हें निर्दिष्ट कर सकते हैं अपनी कक्षा पर __ स्लॉट __ विशेषता [] के साथ। यह अजगर को अधिक कुशल बनाने की अनुमति देता है और प्रत्येक ऑब्जेक्ट के लिए किसी संपूर्ण शब्दकोश की आवश्यकता नहीं है। आपके मामले में, आप वर्ग के नीचे दिए गए पंक्ति पर __ स्लॉट्स_ = ["एक", "सौ"] जोड़कर ऐसा कर सकते हैं टेस्ट: । हालांकि, मुझे थोड़ा आश्चर्य होगा कि यदि ये ऑब्जेक्ट्स को शब्दकोशों से छोटा बनाने के लिए पर्याप्त थे; पाइथन के शब्दकोश बहुत कम मूल्यों के साथ उपयोग करने के लिए अनुकूलित हैं। ( संपादित करें: मैं थोड़ा आश्चर्यचकित हूं, जाहिरा तौर पर यह उन्हें शब्दकोशों से छोटा बनाता है।)
Comments
Post a Comment