जैसाकि हमने पिछले Chapters में भी बताया कि Python एक Dynamically Typed Scripting Language है, जिसमें हमें C/C++, Java की तरह किसी Variable को Use करने से पहले उसका Type Declare करके Compiler/Interpreter को ये नहीं बताना होता कि हम उस Variable में किस प्रकार का Data Store करने वाले हैं।
बल्कि हमें केवल Variable का नाम Specify करके उसमें किसी Value को Assign करना होता है और Python Interpreter स्वयं ही उस Specified Data के आधार पर तय कर लेता है कि Variable में किस प्रकार के Data को Store करना है और उसी के Accordingly ये भी तय हो जाता है कि Declare होने वाले Variable का Data Type क्या होगा। हमें ये Flexibility Dynamic Typing की वजह से ही प्राप्त होती है।
Variables, Objects and References
Python में हम जैसे ही Assignment Operator का प्रयोग करते हुए किसी Value को किसी Identifier में Store करते हैं, Python Runtime में उस Identifier को Create करता है और उस Value को उस Newly Created Identifier में Store कर देता है जिसे Assignment Operator के Right Side में Specify किया गया होता है। इस पूरी प्रक्रिया में निम्नानुसार तीन काम होते हैं-
Variable Creation
सबसे पहले Specify किए गए नाम का एक Memory Location Reserve होता है। ये नाम एक Variable कहलाता है क्योंकि जब भी कभी पूरे Program के दौरान उस Variable को फिर से Access करना होता है, तो हमें उसी Identifier यानी Variable Name को Use करना पड़ता है, जिसे Declaration के समय हमने Specify किया था।
Variable Types
Python में कभी भी किसी भी Variable के Type को Specify नहीं किया जाता क्योंकि Python में C/C++, Java, C# की तरह किसी Variable के Type को Specify करने के लिए कोई Built-In Keyword या Reserved Word नहीं होता है।
ऐसा इसलिए है क्योंकि Python में सबकुछ Object होता है और Variables किसी Object का हमेंशा एक Reference मात्र Hold करते हैं। यानी Python में हर Type किसी न किसी प्रकार का Object होता है और हर Variable में किसी Object का केवल Reference मात्र ही Store होता है।
इसलिए Python Program में हम जब भी किसी Variable की Value Change करते हैं, तो वास्तव में हम उस Variable में Stored किसी Object के Reference के स्थान पर किसी दूसरे Object के Reference को Overwrite कर रहे होते हैं। परिणामस्वरूप एक ही Variable एक ही Python Program में अलग-अलग जगह पर अलग-अलग Type के Objects को Refer कर रहा होता है।
Use of Variable
जैसे ही हम किसी Variable को किसी Expression में Specify करते हैं, तुरन्त वह Variable अपने Actual Object से Replace हो जाता है। यानी Expression में जिस जगह पर हमने Variable को Specify किया होता है, ठीक उसी जगह पर उस Variable द्वारा जिस Object को Reference किया जा रहा है, उस Object की Memory Location पर Stored Value Replace हो जाता है।
इसीलिए किसी Variable को किसी Expression में Use करने से पहले उसका Initialized होना जरूरी होता है ताकि वह Variable पहले से उस Memory Location को Reference कर रहा हो, जहां Stored Value को Current Expression में Variable की जगह पर Expand या Inflate करना है।
इस तरह से सारांश में कहें तो एक Variable तब Create होता है, जब उसे Assign किया जाता है और ये Variable, पिछले Chapter में Discussed Python के किसी भी Type के Object को Reference कर सकता है साथ ही Reference करने से पहले उसका Initialized होना जरूरी है।
इसका मतलब ये है कि C/C++, Java की तरह हमें हमारे Python Script में किसी भी Variable को Declare करना जरूरी नहीं होता लेकिन हम जिस भी Variable को किसी भी Expression में Use करते हैं, उस Variable का पहले से किसी न किसी Object के Reference से Initialized होना जरूरी होता है।
इसलिए यदि हम कोई ऐसा Variable Declare करना चाहते हैं, जिसमें Data बाद में किसी Calculation के माध्यम से Generate होगा, तब भी हमें उस Variable को किसी न किसी Default मान से Initialize करना जरूरी है।
उदाहरण के लिए यदि हमें counter नाम का Variable Create करना हो, जिसकी Counting बाद में किसी Looping Statement से शुरू होगी, तो उस स्थिति में भी हमें counter को counter = 0 लिखकर पहले Declare करना जरूरी है। बाद में हम इस counter को Looping Statement के अन्दर Update या Increment कर सकते हैं।
इस प्रकार से जब हम counter = 0 लिखते हैं, तब Python Interpreter को तीन काम करता है-
- सबसे पहले Integer Type का एक Object Create करके उसके उसके लिए Memory में Space Reserve करता है।
- फिर अगर counter नाम का Variable पहले से Created नहीं है, तो counter नाम का एक Variable Create करता है।
- और अन्त में उस counter नाम के Variable में पहले Step में Create किए गए Integer Type के Object का Reference Assign कर देता है।
इस तरह से Python जितने भी Objects और Variables Create करता है, उन सभी को हमारे Computer System के Different Memory Area में Store करके रखता है और सभी Variables किसी न किसी Object के Link यानी Reference को ही Hold करते हैं। यानी Python में कोई भी Variable किसी दूसरे Variable के Reference या Value को Hold नहीं करता बल्कि सिर्फ और सिर्फ किसी अन्य Object के Reference को ही Hold करता है।
Python के Reference काफी हद तक C Language के Pointers की तरह ही होते हैं और Internally इन्हें Pointers के माध्यम से ही Implement किया गया है, लेकिन Python के References के माध्यम से हम उसी तरह के Operations Perform नहीं कर सकते जिस तरह से C Language के Pointers द्वारा कर सकते हैं।
साथ ही Python के References जरूरत न होने पर Automatically Dereference भी हो जाते हैं, जिसके परिणामस्वरूप हमें C में Pointers की तरह आने वाले Bugs को Python में Deal नहीं करना पड़ता। इसलिए यदि सरलतम शब्दों में कहें तो Python के Reference, C Language के “void *” Pointer की तरह होते हैं जिन्हें जब भी Use किया जाता है, वे Automatically Follow हो जाते हैं। Python की इस प्रक्रिया को निम्न चित्र द्वारा ज्यादा बेहतर तरीके से समझा जा सकता है-

जैसाकि इस चित्र में हम देख सकते हैं कि Variable को Object से Connect करने वाले Link को Python में Reference कहा जाता है और ये एक प्रकार से C/C++ के Pointer के समान ही होता है जो किसी Specific Memory Location को Point करता है। हम पूरे Python Program में जहां कहीं भी किसी Variable को Specify करते हैं, Python Internally Variable-to-Object के Link को ही Follow करता है।
हम हमारे Python Program में जहां पर भी किसी Expression के माध्यम से किसी Value को Generate करते हैं, Python एक नया Object Create कर देता है और ये Object और कुछ नहीं बल्कि एक Memory Block ही होता है जो उस Expression से Generate होने वाले Data को Store व Represent करता है।
Python Internally कुछ विशिष्ट प्रकार के Unchangeable Objects को फिर से Reuse करने के लिए Cache करके रखता है, ताकि Python Program की Performance बनी रहे। उदाहरण के लिए Small Integers व Strings जैसे कि Program में Use होने वाला प्रत्येक 0 Memory में कोई नया Space Reserve नहीं करते। लेकिन फिर भी Python विभिन्न Expressions व Statements को इसी तरह से Treat करता है जैसे कि प्रत्येक मान एक Distinct Object हो और प्रत्येक Distinct Object के लिए अलग Reserved Memory हो।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Python in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी है, तो निश्चित रूप से ये EBook भी आपके लिए काफी उपयोगी साबित होगी।
Python in Hindi | Page: 602 | Format: PDF