यदि आप C / Java / etc की भाषा से पायथन में आ रहे हैं। परिवार, यह आपको a
"चर" के रूप में सोचने से रोकने में मदद कर सकता है , और इसे "नाम" के रूप में सोचना शुरू कर सकता है।
a
, b
और c
समान मूल्यों वाले विभिन्न चर नहीं हैं; वे समान समान मूल्य के लिए अलग-अलग नाम हैं। चर के प्रकार, पहचान, पते और सभी प्रकार के सामान हैं।
नामों में से कोई भी नहीं है। मूल्य , निश्चित रूप से, और आपके पास समान मूल्य के लिए बहुत सारे नाम हो सकते हैं।
यदि आप Notorious B.I.G.
एक हॉट डॉग देते हैं, * Biggie Smalls
और Chris Wallace
एक हॉट डॉग है। यदि आप a
1 के पहले तत्व को बदलते हैं , तो 1 के पहले तत्व हैं b
और c
1 हैं।
यदि आप जानना चाहते हैं कि क्या दो नाम एक ही वस्तु का नाम दे रहे हैं, तो 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
को किसी और चीज़ में बदलने का कोई तरीका नहीं है। 10
10 हमेशा के लिए है, जैसे क्लाउडिया वैम्पायर 5 हमेशा के लिए है (कम से कम जब तक वह क्रिस्टन डंस्ट द्वारा प्रतिस्थापित नहीं किया जाता है)।
* चेतावनी: कुख्यात बीआईजी को हॉट डॉग न दें। गैंगस्टा रैप लाश को आधी रात के बाद कभी नहीं खिलाना चाहिए।
a
,b
और,c,
एक ही मूल्य के लिए सभी बिंदु (इस मामले में एक सूची) के लिए, या आप चाहते हैंa=0
,b=3
और,c=5
। उस मामले में, आप चाहते हैंa,b,c = [0,3,5]
या बसa,b,c = 0,3,5
।