पायथन में चर और स्मृति को कैसे प्रबंधित किया जाता है? क्या इसमें एक ढेर और एक ढेर है और स्मृति को प्रबंधित करने के लिए किस एल्गोरिथ्म का उपयोग किया जाता है? यह देखते हुए कि क्या बड़ी संख्या / डेटा क्रंचिंग के लिए मेमोरी प्रबंधन पर कोई सिफारिशें हैं?
पायथन में चर और स्मृति को कैसे प्रबंधित किया जाता है? क्या इसमें एक ढेर और एक ढेर है और स्मृति को प्रबंधित करने के लिए किस एल्गोरिथ्म का उपयोग किया जाता है? यह देखते हुए कि क्या बड़ी संख्या / डेटा क्रंचिंग के लिए मेमोरी प्रबंधन पर कोई सिफारिशें हैं?
जवाबों:
अजगर में कैसे चर और स्मृति का प्रबंधन किया जाता है।
पूर्ण रूप से अपने! नहीं, वास्तव में, आप केवल एक ऑब्जेक्ट बनाते हैं और पायथन वर्चुअल मशीन आवश्यक मेमोरी को संभालती है और इसे मेमोरी लेआउट में रखा जाएगा।
क्या इसमें एक ढेर और एक ढेर है और स्मृति को प्रबंधित करने के लिए किस एल्गोरिथ्म का उपयोग किया जाता है?
जब हम इसके बारे में बात कर रहे हैं तो CPython
यह वस्तुओं के भंडारण के लिए एक निजी ढेर का उपयोग करता है । CPython C API प्रलेखन से :
पायथन में मेमोरी प्रबंधन में एक निजी ढेर शामिल होता है जिसमें सभी पायथन ऑब्जेक्ट और डेटा संरचनाएं होती हैं। इस निजी ढेर का प्रबंधन आंतरिक रूप से पायथन मेमोरी मैनेजर द्वारा सुनिश्चित किया गया है। पायथन मेमोरी मैनेजर में विभिन्न घटक होते हैं जो विभिन्न गतिशील भंडारण प्रबंधन पहलुओं से निपटते हैं, जैसे साझाकरण, विभाजन, प्रचार या कैशिंग।
मेमोरी रिक्लेमेशन को ज्यादातर संदर्भ गिनती द्वारा नियंत्रित किया जाता है । यही है, पायथन वीएम एक आंतरिक पत्रिका रखता है कि किसी वस्तु को कितने संदर्भ संदर्भित करते हैं, और स्वचालित रूप से कचरा एकत्र करता है जब कोई संदर्भ नहीं होता है। इसके अलावा, वस्तुओं के अगम्य "द्वीपों" का पता लगाकर, कुछ पारंपरिक जीसी एल्गोरिदम के विपरीत, जो सभी पहुंच योग्य वस्तुओं को खोजने की कोशिश करते हैं , का पता लगाकर परिपत्र संदर्भ (जो संदर्भ गिनती को संभाल नहीं सकता) को तोड़ने के लिए एक तंत्र है ।
नोट: कृपया ध्यान रखें कि यह जानकारीCPython
विशिष्ट है। जैसे अन्य अजगर कार्यान्वयन,pypy
,iron python
,jython
और दूसरों को एक दूसरे से और CPython से अलग हो सकता है जब यह उनके कार्यान्वयन बारीकियों की बात आती है। इसे बेहतर समझने के लिए, यह समझने में मदद मिल सकती है कि पायथन शब्दार्थ (भाषा) और अंतर्निहित कार्यान्वयन के बीच अंतर है
यह देखते हुए कि क्या बड़ी संख्या / डेटा क्रंचिंग के लिए मेमोरी प्रबंधन पर कोई सिफारिशें हैं?
अब मैं इस बारे में नहीं बोल सकता, लेकिन मुझे यकीन है कि NumPy (नंबर क्रंचिंग के लिए सबसे लोकप्रिय पायथन लाइब्रेरी) में ऐसे तंत्र हैं जो स्मृति खपत को इनायत से संभालते हैं।
यदि आप अजगर के आंतरिक के बारे में अधिक जानना चाहते हैं, तो इन संसाधनों पर एक नज़र डालें:
अजगर के पास ऐसी कोई चीज नहीं है ।
पायथन भाषा है और यह निर्दिष्ट नहीं करती है कि पायथन द्वारा परिभाषित शब्दार्थ को वास्तव में कैसे लागू किया जाना चाहिए।
हर कार्यान्वयन (CPython, PyPy, IronPython, stackless , Jython ...) अपनी ही बात करने के लिए स्वतंत्र है!
में सी अजगर, सभी वस्तुओं ढेर पर रहते हैं:
पायथन में मेमोरी प्रबंधन में एक निजी ढेर शामिल होता है जिसमें सभी पायथन ऑब्जेक्ट और डेटा संरचनाएं होती हैं। 1
CPython वर्चुअल मशीन स्टैक आधारित है:
>>> def g():
x = 1
y = 2
return f(x, y)
>>> import dis
>>> dis.dis(g)
2 0 LOAD_CONST 1 (1) # Push 1 onto the stack
3 STORE_FAST 0 (x) # Stores top of stack into local var x
3 6 LOAD_CONST 2 (2) # Push 2 onto stack
9 STORE_FAST 1 (y) # Store TOS into local var y
4 12 LOAD_GLOBAL 0 (f) # Push f onto stack
15 LOAD_FAST 0 (x) # Push x onto stack
18 LOAD_FAST 1 (y) # Push y onto stack
21 CALL_FUNCTION 2 # Execute function with 2
# f's return value is pushed on stack
24 RETURN_VALUE # Return TOS to caller (result of f)
ध्यान रखें, कि यह सीपीथॉन विशिष्ट है। ढेर में वास्तविक मूल्य शामिल नहीं हैं , हालांकि, यह उन वस्तुओं का संदर्भ रखता है।
1 : स्रोत