Mutable and Immutable Data Types in hindi | (संपूर्ण जानकारी हिंदी में)
Mutable और Immutable Data Types क्या होते हैं? उदाहरण के साथ हिंदी में आसान शब्दों में समझें। Python Programming का एक महत्वपूर्ण concept।
आगे बढ़ने से पहले, हमारे लिए यह समझना बहुत ज़रूरी है कि Immutability का असली मतलब क्या होता है। इस कॉन्सेप्ट को समझे बिना आप कभी यह नहीं जान पाएंगे कि कुछ डेटा टाइप्स दूसरों से अलग व्यवहार क्यों करते हैं।
एक बार जब आप इसके मूल सिद्धांत (core concept) को समझ लेंगे, तो Mutable और Immutable के बीच का अंतर आपको रटना नहीं पड़ेगा, बल्कि यह पूरी तरह से लॉजिकल (Logical) लगेगा।
“Immutable” (अपरिवर्तनीय) का असली मतलब क्या है?
सरल शब्दों में एक Immutable ऑब्जेक्ट को उसकी उसी मेमोरी लोकेशन (Memory Location) पर बदला या मॉडिफाई नहीं किया जा सकता।
जब भी हमें ऐसा लगता है कि किसी Immutable ऑब्जेक्ट की वैल्यू बदल रही है, तो असल में पायथन बैकएंड पर उस वैल्यू को बदलने के बजाय एक नया ऑब्जेक्ट (New Object) बनाता है और हमारे वेरिएबल को उस नए ऑब्जेक्ट का पता (Address) थमा देता है।
पायथन में Variables केवल References (मेमोरी एड्रेस) स्टोर करते हैं, Values नहीं!
पायथन में वेरिएबल्स सीधे वैल्यूज़ को अपने अंदर स्टोर नहीं करते हैं। इसके बजाय, एक वेरिएबल उस ऑब्जेक्ट के रेफरेंस यानी मेमोरी एड्रेस (Reference / Address) को होल्ड करता है जहाँ वह वैल्यू रखी हुई है। आइए इसे एक उदाहरण से समझते हैं:
💡 उदाहरण (Example):
मान लेते हैं कि हमारे पास नीचे दिए गए तीन वेरिएबल्स हैं:
var1 = 5
var2 = var1
var3 = 5
इस स्थिति में मेमोरी के अंदर क्या होता है, उसे समझिए:
- यहाँ var1, var2, और var3 तीनों वेरिएबल्स मेमोरी में मौजूद एक ही इंटीजर ऑब्जेक्ट 5 को रेफर (पॉइंट) कर रहे हैं।
- मेमोरी में 5 वैल्यू वाला केवल एक ही ऑब्जेक्ट बनता है।
- इससे यह साबित होता है कि पायथन में एक ही ऑब्जेक्ट को कई सारे वेरिएबल्स पॉइंट कर सकते हैं, जिससे मेमोरी की बहुत बचत होती है।
🔍 इसका पता कैसे लगाएं? (id() फंक्शन)
अगर आप पायथन में देखना चाहते हैं कि क्या सच में इन तीनों का मेमोरी एड्रेस एक ही है, तो आप id() फंक्शन का इस्तेमाल कर सकते हैं:
print(id(var1)) # आउटपुट: मान लेते हैं 1457662208
print(id(var2)) # आउटपुट: 1457662208 (बिल्कुल सेम)
print(id(var3)) # आउटपुट: 1457662208 (बिल्कुल सेम)
(नोट: यदि तीनों का id सेम है, इसका मतलब वे मेमोरी में एक ही जगह को पॉइंट कर रहे हैं!)
Immutable Value को बदलने पर क्या होता है?
आइए पिछले उदाहरण को ही आगे बढ़ाते हैं और देखते हैं कि जब हम वेरिएबल्स की वैल्यूज बदलते हैं, तो बैकएंड पर क्या बदलाव होते हैं:
var1 = 10
var3 = 7
var2 = var3
अब मेमोरी के अंदर वेरिएबल्स इस प्रकार पॉइंट करेंगे:
- var1 अब ऑब्जेक्ट 10 को रेफर कर रहा है।
- var2 अब ऑब्जेक्ट 7 को रेफर कर रहा है।
- var3 भी अब ऑब्जेक्ट 7 को ही रेफर कर रहा है।
मेमोरी एड्रेस (Memory Addresses) को चेक करना
जब हम id() फंक्शन की मदद से इनके मेमोरी एड्रेस प्रिंट करेंगे:
print(id(var1))
print(id(var2))
print(id(var3))
संभावित आउटपुट (मेमोरी एड्रेस हर सिस्टम में अलग हो सकते हैं):
1457662288
1457662240
1457662240
इस आउटपुट से हमें क्या समझ आया?
- ऑब्जेक्ट में बदलाव नहीं होता: पायथन ने पुराने ऑब्जेक्ट 5 के अंदर कोई छेड़छाड़ (modify) नहीं की। इसके बजाय, उसने वेरिएबल्स को दूसरे नए ऑब्जेक्ट्स की तरफ पॉइंट करवा दिया।
- अलग एड्रेस: var1 का मेमोरी एड्रेस अब पूरी तरह बदल चुका है, क्योंकि यह अब 5 के बजाय 10 को पॉइंट कर रहा है।
- सेम एड्रेस: var2 और var3 दोनों का मेमोरी एड्रेस बिल्कुल एक जैसा (same) है, क्योंकि ये दोनों अभी एक ही ऑब्जेक्ट 7 को रेफर कर रहे हैं।
Mutable और Immutable Types क्या होते हैं?
पायथन में सभी डेटा ऑब्जेक्ट्स को उनके व्यवहार के आधार पर दो मुख्य केटेगरी में बाँटा गया है:
- Immutable Types (अपरिवर्तनीय)
- Mutable Types (परिवर्तनीय)
Immutable Data Types (अपरिवर्तनीय डेटा टाइप)
सरल शब्दों में: Immutable का मतलब है— जो बदला न जा सके। ये वे डेटा टाइप्स होते हैं जिनकी वैल्यूज को एक बार क्रिएट (बनाने) करने के बाद मॉडिफाई या बदला नहीं जा सकता।
यदि हम इनकी वैल्यू को बदलने की कोशिश करते हैं, तो पायथन पुराने ऑब्जेक्ट में बदलाव करने के बजाय मेमोरी में एक नया ऑब्जेक्ट बना देता है।
पायथन में निम्नलिखित डेटा टाइप्स Immutable होते हैं:
- Integer (int)
- Floating Point Numbers (float)
- Booleans (bool)
- Strings (str)
- Tuples (tuple)
व्यावहारिक उदाहरण (Conceptual Example):
आइए देखते हैं कि बैकएंड पर यह कैसे काम करता है:
num1 = 300
num2 = num1
num1 = num2 + 100
- num1 = 300 ➔ पायथन मेमोरी में 300 वैल्यू का एक ऑब्जेक्ट बनाता है और num1 को उसका एड्रेस दे देता है।
- num2 = num1 ➔ अब num1औरnum2 दोनों मेमोरी में मौजूद एक ही ऑब्जेक्ट (300`) को रेफर करते हैं।
- num1 = num2 + 100 ➔ चूँकि int एक Immutable टाइप है, इसलिए पायथन 300 में 100 जोड़ने के लिए पुराने ऑब्जेक्ट को नहीं बदलता। वह बैकएंड पर एक नया ऑब्जेक्ट 400 बनाता है और num1 को उसकी तरफ पॉइंट करवा देता है।
अब num1 एक बिल्कुल नए मेमोरी लोकेशन को पॉइंट कर रहा है, जबकि num2 अभी भी पुराने 300 वाले एड्रेस पर ही टिका हुआ है।
Mutable Data Types (परिवर्तनीय डेटा टाइप)
✅ सरल शब्दों में: Mutable का मतलब है— जो बदला जा सके। ये वे डेटा टाइप्स होते हैं जिनकी वैल्यूज या एलिमेंट्स को एक बार क्रिएट (बनाने) करने के बाद भी आसानी से मॉडिफाई या बदला जा सकता है।
इसमें सबसे खास बात यह है कि ऑब्जेक्ट का मेमोरी लोकेशन (Address) बिल्कुल वही रहता है, लेकिन उसके अंदर का कंटेंट या डेटा अपडेट हो जाता है। इसे प्रोग्रामिंग की भाषा में In-place Modification (उसी स्थान पर बदलाव) कहते हैं।
पायथन में मुख्य रूप से निम्नलिखित डेटा टाइप्स Mutable होते हैं:
- List (list)
- Dictionary (dict)
- Set (set)
व्यावहारिक उदाहरण (Conceptual Example):
आइए देखते हैं कि लिस्ट में बदलाव करने पर बैकएंड पर क्या होता है:
list1 = [10, 20, 30]
list1[0] = 100 #value is changed
पायथन यहाँ list1 के लिए कोई नया ऑब्जेक्ट या नई मेमोरी लोकेशन नहीं बनाएगा, बल्कि उसी पुरानी जगह पर जाकर 10 को हटाकर 100 लिख देगा।
🔍 id() फ़ंक्शन की मदद से मेमोरी एड्रेस चेक करना
आइए एक कोड बनाकर देखते हैं कि क्या सच में वैल्यू बदलने के बाद भी मेमोरी एड्रेस समान रहता है:
# Creating List
Chk = [2, 4, 6]
print(“Address before modifying values:”, id(Chk))
# Modifying second element in list
Chk[1] = 40
print(“Address after modifying values:”, id(Chk))
# Printing List
print(“Updated List:”, Chk)
संभावित आउटपुट (मेमोरी एड्रेस हर सिस्टम में अलग हो सकते हैं):
Address before modifying Values: 150195536
Address after modifying values: 150195536
Updated List: [2, 40, 6]
इस आउटपुट से जुड़े मुख्य ऑब्जर्वेशन:
- समान मेमोरी एड्रेस: आपने ध्यान दिया होगा कि मॉडिफिकेशन (बदलाव) से पहले और बाद में लिस्ट का मेमोरी एड्रेस (id) बिल्कुल एक जैसा ही है।
- इन-प्लेस मॉडिफिकेशन: यह साबित करता है कि लिस्ट को उसकी उसी पुरानी मेमोरी लोकेशन पर मॉडिफाई किया गया है, पायथन ने बैकएंड पर कोई नया ऑब्जेक्ट क्रिएट नहीं किया।
Mutable vs Immutable Types (मुख्य अंतर)
| Mutable Types (परिवर्तनीय) | Immutable Types (अपरिवर्तनीय) |
| इन ऑब्जेक्ट्स की वैल्यू को उसी मेमोरी लोकेशन पर बदला (modify) जा सकता है। | इन ऑब्जेक्ट्स की वैल्यू को उसी मेमोरी लोकेशन पर बदला नहीं जा सकता। |
| बदलाव के बाद भी ऑब्जेक्ट का मेमोरी एड्रेस (Address) आमतौर पर समान रहता है। | वैल्यू बदलते ही पायथन बैकएंड पर एक नया ऑब्जेक्ट (New Address) बना देता है। |
| list (लिस्ट), dict (डिक्शनरी), set (सेट) | int (इंटीजर), float (फ्लोट), bool (बुलियन), str (स्ट्रिंग), tuple (टपल) |