मैं भ्रम को कम करने के लिए चर का नाम बदल दूंगा। n -> एनएफ या Nmain । x -> xf या xmain :
def f(nf, xf):
nf = 2
xf.append(4)
print 'In f():', nf, xf
def main():
nmain = 1
xmain = [0,1,2,3]
print 'Before:', nmain, xmain
f(nmain, xmain)
print 'After: ', nmain, xmain
main()
जब आप फ़ंक्शन को f कहते हैं , तो पायथन रनटाइम xmain की एक प्रति बनाता है और इसे xf को असाइन करता है , और इसी तरह nmain की एक कॉपी nf को असाइन करता है ।
N के मामले में , कॉपी किया गया मान 1 है।
के मामले में एक्स मूल्य की नकल की जाती है नहीं शाब्दिक सूची [0, 1, 2, 3] । यह उस सूची का संदर्भ है। xf और xmain एक ही सूची में इंगित कर रहे हैं, इसलिए जब आप xf को संशोधित करते हैं तो आप xmain को संशोधित भी कर रहे हैं ।
यदि, हालांकि, आप कुछ लिखना चाहते थे:
xf = ["foo", "bar"]
xf.append(4)
आप पाएंगे कि xmain नहीं बदला है। ऐसा इसलिए है, क्योंकि लाइन में xf = ["foo", "bar"] आपके पास एक नई सूची को इंगित करने के लिए xf है । इस नई सूची में आपके द्वारा किए गए किसी भी बदलाव का उस सूची पर कोई प्रभाव नहीं पड़ेगा जो अभी भी xmain को इंगित करता है।
उम्मीद है की वो मदद करदे। :-)