पायथन मेमोरीव्यू ()

मेमोरीव्यू () फ़ंक्शन दिए गए तर्क का मेमोरी व्यू ऑब्जेक्ट लौटाता है।

इससे पहले कि हम क्या स्मृति विचार कर रहे हैं, हमें पहले पायथन के बफर प्रोटोकॉल के बारे में समझने की आवश्यकता है।

पायथन बफर प्रोटोकॉल

बफर प्रोटोकॉल किसी ऑब्जेक्ट के आंतरिक डेटा तक पहुंचने का एक तरीका प्रदान करता है। यह आंतरिक डेटा एक मेमोरी एरे या बफर है।

बफर प्रोटोकॉल एक वस्तु को अपने आंतरिक डेटा (बफ़र्स) को उजागर करने की अनुमति देता है और दूसरे को मध्यवर्ती नकल के बिना उन बफ़र्स तक पहुंचने के लिए।

यह प्रोटोकॉल केवल C-API स्तर पर हमारे लिए उपलब्ध है और हमारे सामान्य कोडबेस का उपयोग नहीं कर रहा है।

तो, एक ही प्रोटोकॉल को सामान्य पायथन कोडबेस में उजागर करने के लिए, स्मृति दृश्य मौजूद हैं।

स्मृति दृश्य क्या है?

एक मेमोरी दृश्य पाइथन में बफर प्रोटोकॉल को उजागर करने का एक सुरक्षित तरीका है।

यह आपको मेमोरी व्यू ऑब्जेक्ट बनाकर किसी ऑब्जेक्ट के आंतरिक बफ़र्स तक पहुंचने की अनुमति देता है।

बफर प्रोटोकॉल और मेमोरी व्यू महत्वपूर्ण क्यों हैं?

हमें यह याद रखने की आवश्यकता है कि जब भी हम किसी वस्तु पर कोई क्रिया करते हैं (किसी वस्तु के कार्य को कॉल करते हैं, तो एरे को स्लाइस करते हैं), पायथन को ऑब्जेक्ट की एक प्रति बनाने की आवश्यकता होती है

यदि हमारे पास काम करने के लिए बड़ा डेटा है (उदाहरण के लिए, एक छवि का बाइनरी डेटा), तो हम अनावश्यक रूप से डेटा के विशाल हिस्से की प्रतियां बना लेंगे, जो लगभग कोई उपयोग नहीं करता है।

बफर प्रोटोकॉल का उपयोग करके, हम बड़े डेटा को कॉपी किए बिना उपयोग / संशोधित करने के लिए एक और ऑब्जेक्ट एक्सेस दे सकते हैं। इससे प्रोग्राम कम मेमोरी का उपयोग करता है और निष्पादन की गति बढ़ाता है।

पायथन मेमोरीव्यू () सिंटेक्स

बफर प्रोटोकॉल का उपयोग करने के लिए memoryview(), हम इस वाक्यविन्यास का उपयोग करते हैं:

 मेमोरीव्यू (obj)

मेमोरीव्यू () पैरामीटर्स

memoryview()समारोह के लिए एक एकल पैरामीटर लेता है:

  • obj - ऑब्जेक्ट जिसका आंतरिक डेटा उजागर किया जाना है। objबफर प्रोटोकॉल का समर्थन करना चाहिए (बाइट्स, बायटियर)

मेमोरीव्यू () से वापसी मान

memoryview()समारोह एक स्मृति दृश्य वस्तु देता है।

उदाहरण 1: पायथन में मेमोरीव्यू () कैसे काम करता है?

 #random bytearray random_byte_array = bytearray('ABC', 'utf-8') mv = memoryview(random_byte_array) # access memory view's zeroth index print(mv(0)) # create byte from memory view print(bytes(mv(0:2))) # create list from memory view print(list(mv(0:3)))

आउटपुट

 65 b'AB '(65, 66, 67) 

यहाँ, हमने बाइट सरणी random_byte_array से एक मेमोरी व्यू ऑब्जेक्ट mv बनाया।

फिर, हमने एमवी के 0 वें इंडेक्स तक पहुंच बनाई 'A', और इसे प्रिंट किया (जो एएससीआईआई मूल्य - 65 देता है)।

फिर से, हमने mv के सूचकांकों को 0 और 1 से एक्सेस किया 'AB', और उन्हें बाइट्स में बदल दिया।

अंत में, हमने एमवी के सभी सूचकांकों को एक्सेस किया और इसे एक सूची में बदल दिया। चूंकि आंतरिक रूप bytearrayसे अक्षर के लिए ASCII मूल्य संग्रहीत करता है, इसलिए आउटपुट A, B, C और ASCII मूल्यों की एक सूची है।

उदाहरण 2: मेमोरी दृश्य का उपयोग करके आंतरिक डेटा को संशोधित करें

 # random bytearray random_byte_array = bytearray('ABC', 'utf-8') print('Before updation:', random_byte_array) mv = memoryview(random_byte_array) # update 1st index of mv to Z mv(1) = 90 print('After updation:', random_byte_array)

आउटपुट

 अपडेशन से पहले: bytearray (b'ABC ') अपडेशन के बाद: bytearray (b'AZC') 

यहां, हमने मेमोरी व्यू के 1st इंडेक्स को 90, एएससीआईआई के मूल्य को अपडेट किया है Z

चूंकि, मेमोरी व्यू ऑब्जेक्ट एमवी एक ही बफर / मेमोरी को संदर्भित करता है, एमवी में इंडेक्स को अपडेट करना भी random_byte_array को अपडेट करता है।

दिलचस्प लेख...