यदि आप C / Java / etc की भाषा से पायथन में आ रहे हैं। परिवार, यह आपको a"चर" के रूप में सोचने से रोकने में मदद कर सकता है , और इसे "नाम" के रूप में सोचना शुरू कर सकता है।
a, bऔर cसमान मूल्यों वाले विभिन्न चर नहीं हैं; वे समान समान मूल्य के लिए अलग-अलग नाम हैं। चर के प्रकार, पहचान, पते और सभी प्रकार के सामान हैं।
नामों में से कोई भी नहीं है। मूल्य , निश्चित रूप से, और आपके पास समान मूल्य के लिए बहुत सारे नाम हो सकते हैं।
यदि आप Notorious B.I.G.एक हॉट डॉग देते हैं, * Biggie Smallsऔर Chris Wallaceएक हॉट डॉग है। यदि आप a1 के पहले तत्व को बदलते हैं , तो 1 के पहले तत्व हैं bऔर c1 हैं।
यदि आप जानना चाहते हैं कि क्या दो नाम एक ही वस्तु का नाम दे रहे हैं, तो isऑपरेटर का उपयोग करें :
>>> a=b=c=[0,3,5]
>>> a is b
True
आप तब पूछते हैं:
इससे अलग क्या है?
d=e=f=3
e=4
print('f:',f)
print('e:',e)
यहां, आप नाम eको मान पर रीबाइंड कर रहे हैं 4। यह नामों dऔर fकिसी भी तरह से प्रभावित नहीं करता है ।
अपने पिछले संस्करण में, आप को निर्दिष्ट कर रहे थे a[0], को नहीं a। इसलिए, a[0]आप के दृष्टिकोण से , आप विद्रोह कर रहे हैं a[0], लेकिन देखने के बिंदु से a, आप इसे जगह में बदल रहे हैं।
आप idफ़ंक्शन का उपयोग कर सकते हैं , जो आपको ऑब्जेक्ट की पहचान का प्रतिनिधित्व करने वाले कुछ अद्वितीय नंबर देता है, यह देखने के लिए कि वास्तव में कौन सी वस्तु है जो तब भी isमदद नहीं कर सकती है:
>>> a=b=c=[0,3,5]
>>> id(a)
4473392520
>>> id(b)
4473392520
>>> id(a[0])
4297261120
>>> id(b[0])
4297261120
>>> a[0] = 1
>>> id(a)
4473392520
>>> id(b)
4473392520
>>> id(a[0])
4297261216
>>> id(b[0])
4297261216
सूचना जो a[0]4297261120 से बदलकर 4297261216 हो गई है - अब यह एक अलग मूल्य के लिए एक नाम है। और b[0]अब उसी नए मूल्य के लिए एक नाम भी है। ऐसा इसलिए है क्योंकि aऔर bअभी भी एक ही वस्तु नामकरण कर रहे हैं।
कवर के तहत, a[0]=1वास्तव में सूची ऑब्जेक्ट पर एक विधि कह रहा है। (यह बराबर है a.__setitem__(0, 1)।) तो, यह वास्तव में कुछ भी नहीं विद्रोह कर रहा है। यह बुलाने जैसा है my_object.set_something(1)। निश्चित रूप से, इस विधि को लागू करने के लिए ऑब्जेक्ट एक उदाहरण विशेषता को रिबंड कर रहा है, लेकिन यह महत्वपूर्ण नहीं है; यह महत्वपूर्ण है कि आप कुछ भी निर्दिष्ट नहीं कर रहे हैं, आप केवल वस्तु को बदल रहे हैं। और इसके साथ भी ऐसा ही है a[0]=1।
user570826 ने पूछा:
अगर हमारे पास है, a = b = c = 10
ठीक वैसी ही स्थिति है a = b = c = [1, 2, 3]: आपके पास एक ही मूल्य के तीन नाम हैं।
लेकिन इस मामले में, मूल्य एक है int, और intएस अपरिवर्तनीय हैं। या तो मामले में, आप rebind कर सकते हैं aएक अलग मूल्य (जैसे, करने के लिए a = "Now I'm a string!"), लेकिन मूल मूल्य है, जो प्रभावित नहीं करेगा bऔर cअभी भी के लिए नाम हो जाएगा। अंतर यह है कि एक सूची के साथ, आप मूल्य बदल सकते हैं [1, 2, 3]में [1, 2, 3, 4]ऐसा करके, जैसे, a.append(4); चूँकि वह वास्तव में मूल्य बदल रहा है bऔर उसके cलिए नाम हैं, bअब b होगा [1, 2, 3, 4]। मूल्य 10को किसी और चीज़ में बदलने का कोई तरीका नहीं है। 1010 हमेशा के लिए है, जैसे क्लाउडिया वैम्पायर 5 हमेशा के लिए है (कम से कम जब तक वह क्रिस्टन डंस्ट द्वारा प्रतिस्थापित नहीं किया जाता है)।
* चेतावनी: कुख्यात बीआईजी को हॉट डॉग न दें। गैंगस्टा रैप लाश को आधी रात के बाद कभी नहीं खिलाना चाहिए।
a,bऔर,c,एक ही मूल्य के लिए सभी बिंदु (इस मामले में एक सूची) के लिए, या आप चाहते हैंa=0,b=3और,c=5। उस मामले में, आप चाहते हैंa,b,c = [0,3,5]या बसa,b,c = 0,3,5।