पायथन में बदलने योग्य और अपरिवर्तनीय
यह लेख पायथन में बदलने योग्य और अपरिवर्तनीय को समझाता है।
YouTube Video
पायथन में बदलने योग्य और अपरिवर्तनीय
"बदलने योग्य" और "अपरिवर्तनीय" किसी ऑब्जेक्ट की परिवर्तनशीलता को संदर्भित करते हैं। इसे समझने से अप्रत्याशित बग्स से बचने और कुशल मेमोरी प्रबंधन में मदद मिलती है।
बदलने योग्य क्या है?
बदलने योग्य ऑब्जेक्ट्स का आंतरिक अवस्था निर्माण के बाद बदला जा सकता है।
मुख्य बदलने योग्य डेटा प्रकार
list
dict
set
- उपयोगकर्ता-परिभाषित कक्षाएं (यदि उनके गुण बदले जा सकते हों)
उदाहरण: सूची को संशोधित करना
1numbers = [1, 2, 3]
2numbers[0] = 100
3print(numbers) # [100, 2, 3]
एक सूची एक बदलने योग्य वस्तु है, और इसके तत्वों को स्वतंत्र रूप से बदला जा सकता है।
अपरिवर्तनीय क्या है?
अपरिवर्तनीय वस्तुओं को एक बार बनाए जाने के बाद बदला नहीं जा सकता। उन्हें बदलने का प्रयास करने से एक नई वस्तु का निर्माण होता है।
मुख्य अपरिवर्तनीय डेटा प्रकार
int
float
str
tuple
bool
frozenset
उदाहरण: स्ट्रिंग को संशोधित करना
1text = "hello"
2# text[0] = "H" # TypeError: 'str' object does not support item assignment
3
4text = "H" + text[1:] # Creates a new string
5print(text) # "Hello"
स्ट्रिंग्स अपरिवर्तनीय होती हैं, इसलिए आप उन्हें आंशिक रूप से संशोधित नहीं कर सकते।
बदलने योग्य और अपरिवर्तनीय की तुलना
1# Mutable example
2a = [1, 2, 3]
3b = a
4b[0] = 100
5print(a) # [100, 2, 3] -> a is also changed
6
7# Immutable example
8x = 10
9y = x
10y = 20
11print(x) # 10 -> x is unchanged
जैसा कि ऊपर दिए गए उदाहरण में दिखाया गया है, बदलने योग्य वस्तुएं संदर्भ द्वारा साझा की जाती हैं, इसलिए वे अन्य चर पर प्रभाव डाल सकती हैं।। दूसरी ओर, अपरिवर्तनीय वस्तुएं पुनः असाइनमेंट पर नई इंस्टेंस बनाती हैं, जिससे मौलिक मान अप्रभावित रहता है।
id()
का उपयोग करके आंतरिक व्यवहार निरीक्षण करना
Python में, आप id()
फ़ंक्शन का उपयोग करके एक वस्तु का ID जाँच सकते हैं। वस्तु की ID मेमोरी एड्रेस के समान होती है।
1# Immutable int behavior
2a = 10
3print(id(a)) # e.g., 140715920176592
4a += 1
5print(id(a)) # e.g., 140715920176624 -> ID has changed
6
7# Mutable list behavior
8b = [1, 2, 3]
9print(id(b)) # e.g., 2819127951552
10b.append(4)
11print(id(b)) # Same ID -> only the content has changed
जैसा दिखाया गया है, अपरिवर्तनीय प्रकारों के लिए एक नई वस्तु बनाई जाती है, जबकि परिवर्तनीय प्रकारों को उसी स्थान पर संशोधित किया जाता है।
परिवर्तनीय और अपरिवर्तनीय वस्तुओं के साथ कार्य और सावधानी
जब एक परिवर्तनीय वस्तु को फ़ंक्शन में पास किया जाता है, तो मूल डेटा संशोधित हो सकता है।
उदाहरण: एक फ़ंक्शन जो एक सूची को संशोधित करता है
1def modify_list(lst):
2 lst.append(100)
3
4my_list = [1, 2, 3]
5modify_list(my_list)
6print(my_list) # [1, 2, 3, 100]
उदाहरण: एक फ़ंक्शन जो एक संख्या को संशोधित करता है
दूसरी ओर, एक अपरिवर्तनीय वस्तु को संशोधित करने का प्रयास करने पर एक नई वस्तु बनाई जाती है।
1def modify_number(n):
2 n += 10
3
4my_number = 5
5modify_number(my_number)
6print(my_number) # 5 -> unchanged
व्यावहारिक विचार
डिफ़ॉल्ट आर्ग्युमेंट के रूप में परिवर्तनीय वस्तुओं का उपयोग करने से बचें
1# Bad example
2def add_item(item, container=[]):
3 container.append(item)
4 return container
5
6print(add_item(1)) # [1]
7print(add_item(2)) # [1, 2] -> unintended behavior
8
9# Good example
10def add_item(item, container=None):
11 if container is None:
12 container = []
13 container.append(item)
14 return container
चूँकि डिफ़ॉल्ट आर्ग्युमेंट केवल एक बार फ़ंक्शन परिभाषा के समय मूल्यांकित होते हैं, परिवर्तनीय वस्तुओं का उपयोग अप्रत्याशित दुष्प्रभाव उत्पन्न कर सकता है।
सारांश
Python के वेरिएबल्स और डेटा टाइप्स को गहराई से समझने के लिए, परिवर्तनीय और अपरिवर्तनीय के बीच के अंतर को समझना बहुत महत्वपूर्ण है। इन विशेषताओं को समझने से आप अपने कोड में अनचाहे व्यवहारों से बच सकते हैं और अधिक मजबूत और पठनीय प्रोग्राम लिख सकते हैं।
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।