मैं कुछ विवरणों के बारे में सोच रहा हूं कि कैसे ... पायथन में काम करता है।क्यों पाइथन का 'इन ... इन' कामों की सूची बनाम मूल्यों की सूची पर अलग-अलग काम करता है?
मेरी समझ for var in iterable
प्रत्येक पुनरावृत्ति पर एक चर, विविध, वर्तमान मूल्य के लिए बाध्य बनाता है। इसलिए, यदि आप for c in cows; c = cows[whatever]
करते हैं, लेकिन लूप के भीतर सी बदलना मूल मान को प्रभावित नहीं करता है। हालांकि, यदि आप एक शब्दकोश कुंजी को मान निर्दिष्ट कर रहे हैं तो ऐसा लगता है कि यह अलग-अलग काम करता है।
cows=[0,1,2,3,4,5]
for c in cows:
c+=2
#cows is now the same - [0,1,2,3,4,5]
cows=[{'cow':0},{'cow':1},{'cow':2},{'cow':3},{'cow':4},{'cow':5}]
for c in cows:
c['cow']+=2
# cows is now [{'cow': 2}, {'cow': 3}, {'cow': 4}, {'cow': 5}, {'cow': 6}, {'cow': 7}
#so, it's changed the original, unlike the previous example
मुझे लगता है कि कोई भी पहला उदाहरण काम करने के लिए गणना का उपयोग कर सकता है, लेकिन यह एक अलग कहानी है, मुझे लगता है।
cows=[0,1,2,3,4,5]
for i,c in enumerate(cows):
cows[i]+=1
# cows is now [1, 2, 3, 4, 5, 6]
यह दूसरे उदाहरण में मूल सूची मानों को क्यों प्रभावित करता है लेकिन पहले नहीं?
[संपादित करें]
उत्तर के लिए धन्यवाद। मैं इसे PHP बिंदु दृश्य से देख रहा था, जहां आप संदर्भ में & प्रतीक का उपयोग कर सकते हैं यह निर्दिष्ट करने के लिए कि क्या आप किसी संदर्भ या पुनरावर्तनीय की प्रति पर काम कर रहे हैं या नहीं। अब मैं देखता हूं कि वास्तविक अंतर एक मूलभूत विवरण है कि पाइथन अपरिवर्तनीय वस्तुओं के बारे में कैसे काम करता है।
के लिए +1 मैंने आपका जवाब स्वीकार कर लिया क्योंकि 'अपरिवर्तनीय' जादू शब्द है। मुझे अब याद है कि इनट्स पाइथन में अलग-अलग वस्तुएं हैं, इसलिए यह उस नाम को पहले उदाहरण में किसी अन्य ऑब्जेक्ट पर रीबंड कर रहा था, और उसी ऑब्जेक्ट को दूसरे में संशोधित कर रहा था। – JAL