বিভ্রান্তি কমাতে আমি পরিবর্তনশীলগুলির নাম পরিবর্তন করব। n -> nf বা nmain । x -> এক্সএফ বা এক্সমেইন :
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()
আপনি যখন ফাংশন কল চ , পাইথন রানটাইম একটি কপি করে তোলে xmain প্রয়োজন এবং এটা নির্ধারণ XF , এবং একইভাবে একটি কপি নির্ধারণ nmain করার NF ।
এন এর ক্ষেত্রে , যে মানটি অনুলিপি করা হয় তা হ'ল 1।
X এর ক্ষেত্রে যে মানটি অনুলিপি করা হয় তা আক্ষরিক তালিকা নয় [0, 1, 2, 3] । এটি সেই তালিকার একটি রেফারেন্স । xf এবং xmain একই তালিকার দিকে ইঙ্গিত করছে, তাই আপনি xf সংশোধন করার সময় আপনি xmain পরিবর্তন করছেন ।
তবে, আপনি যদি কিছু লিখতে চান:
xf = ["foo", "bar"]
xf.append(4)
আপনি দেখতে পাবেন যে এক্সমাইন পরিবর্তন হয়নি। এটি কারণ, xf = ["foo", "বার"] লাইনে আপনার xf পরিবর্তন করে একটি নতুন তালিকার দিকে নির্দেশ করেছেন । এই নতুন তালিকায় আপনি যে কোনও পরিবর্তন করেন তার তালিকাটিতে xmain এখনও নির্দেশ করে এমন কোনও প্রভাব ফেলবে না।
আশা করি এইটি কাজ করবে. :-)