2011-07-05 17 views
13

मैं थोड़ी उलझन में हूं जब मैं विधि का उपयोग sys मॉड्यूल के लिए मॉड्यूल में करता हूं। नीचे मैंने दो तारों का एक सरल शब्दकोश बनाया है। दो तारों के आकार शब्दकोश में से एक से स्पष्ट रूप से बड़े हैं। शब्दकोश का आकार शायद शब्दकोश ओवरहेड है, यानी, यह वास्तविक डेटा को ध्यान में नहीं लेता है। पूरे शब्दकोश (कुंजी, मूल्य, शब्दकोश ओवरहेड) के मेमोरी-उपयोग को समझने का सबसे अच्छा तरीका क्या है?पायथन में शब्दकोश का मेमोरी-उपयोग?

>>> first = 'abc'*1000 
>>> second = 'def'*1000 
>>> my_dictionary = {'first': first, 'second': second} 
>>> getsizeof(first) 
3021 
>>> getsizeof(second) 
3021 
>>> getsizeof(my_dictionary) 
140 

उत्तर

8
PythonDocs

recursive sizeof recipe देखें से

है।

तो यह केवल ओवरहेड की गणना करता है, लेकिन आप this link में फ़ंक्शन का उपयोग डिक्ट्स जैसे कंटेनरों के लिए गणना करने के लिए कर सकते हैं।

3

खैर, शब्दकोशों उन्हें अंदर वास्तविक स्ट्रिंग की दुकान नहीं है, यह, C/C++ संकेत की तरह एक सा काम करता है ताकि आप केवल प्रत्येक तत्व के लिए शब्दकोश में एक निरंतर भूमि के ऊपर मिलता है।

कुल आकार getsizeof का उपयोग कर() रिकर्सिवली कंटेनरों और उनके सभी सामग्री का आकार इस बात का एक उदाहरण के लिए

size = getsizeof(d) 
size += sum(map(getsizeof, d.itervalues())) + sum(map(getsizeof, d.iterkeys())) 
+4

पैडेंटिक होने के लिए, यदि कोई मान कंटेनर (स्केलर के बजाए) है तो उसे उस कंटेनर को भी ड्रिल करना होगा। –

3

रिकर्सिव getsizeof वास्तविक आकार प्राप्त होगा, लेकिन यदि आपके पास शब्दकोशों की कई परतें हैं और केवल एक अनुमानित अनुमान प्राप्त करना चाहते हैं। json आसान आता है।

>>> first = 'abc'*1000 
>>> second = 'def'*1000 
>>> my_dictionary = {'first': first, 'second': second} 
>>> getsizeof(first) 
3049 
>>> getsizeof(second) 
3049 
>>> getsizeof(my_dictionary) 
288 
>>> getsizeof(json.dumps(my_dictionary)) 
6076 
>>> size = getsizeof(my_dictionary) 
>>> size += sum(map(getsizeof, my_dictionary.values())) + sum(map(getsizeof, my_dictionary.keys())) 
>>> size 
6495 
+0

निश्चित रूप से रचनात्मकता के लिए अंक इंगित करता है, लेकिन इसे सब कुछ क्रमबद्ध करने की आवश्यकता है, यह धीमा है, और जैसा कि आप कहते हैं कि यह अनुमान है ... – Mark

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