टिप्पणी करें कि मैं लूप के लिए अप्रयुक्त चर की घोषणा कैसे कर सकता हूं? (टिप्पणी आकार से बाहर भाग गया)
पायथन बनाए गए ऑब्जेक्ट के लिए एक ही संदर्भ रखता है। (परिवर्तनशीलता के बावजूद), उदाहरण के लिए,
In [1]: i = 1
In [2]: j = 1
In [3]: id(i)
Out[3]: 142671248
In [4]: id(j)
Out[4]: 142671248
आप i और j दोनों देख सकते हैं, एक ही ऑब्जेक्ट को मेमोरी में देखें। क्या होता है, जब हम एक अपरिवर्तनीय चर के मान को बदलते हैं।
In [5]: j = j+1
In [6]: id(i)
Out[6]: 142671248
In [7]: id(j)
Out[7]: 142671236
आप देख सकते हैं कि j अब एक नए स्थान को इंगित करना शुरू करता है, (जहां 2 संग्रहीत है), और मैं अभी भी उस स्थान को इंगित करता हूं जहां 1 संग्रहीत है। मूल्यांकन करते समय,
j = j+1
मान 142671248 से लिया गया है, गणना की गई (यदि पहले से कैश नहीं की गई है), और एक नए स्थान पर डाल दी गई है 142671236. j को नए स्थान पर इंगित करने के लिए बनाया गया है। सरल शब्दों में, हर बार एक अपरिवर्तनीय चर बनाया गया एक नई प्रति संशोधित की जाती है।
अस्थिरता
म्यूटेबल ऑब्जेक्ट इस संबंध में बहुत कम कार्य करते हैं। जब मूल्य द्वारा इंगित किया गया
In [16]: a = []
In [17]: b = a
In [18]: id(a)
Out[18]: 3071546412L
In [19]: id(b)
Out[19]: 3071546412L
दोनों और बी एक ही मेमोरी लोकेशन की ओर इशारा करते हैं।
In [20]: a.append(5)
एक द्वारा इंगित मेमोरी स्थान संशोधित है।
In [21]: a
Out[21]: [5]
In [22]: b
Out[22]: [5]
In [23]: id(a)
Out[23]: 3071546412L
In [24]: id(b)
Out[24]: 3071546412L
दोनों और बी, अभी भी एक ही मेमोरी स्थान की ओर इशारा करते हैं। दूसरे शब्द में, परिवर्तनशील परिवर्तनीय चर मामले की तरह चर द्वारा बताए गए मान की एक प्रति बनाने के बजाय, चर द्वारा बताए गए समान मेमोरी स्थान का उत्परिवर्तनीय चर कार्य करता है।