পাইথনে ইমিউটেবল (অপরিবর্তনযোগ্য) অবজেক্ট — যেমন ইন্টিজার, স্ট্রিং, টাপল — ফাংশনে পাস করলে আসল অভিপ্রায়ে কল-বাই-ভ্যালুর মত আচরণ করে। কারণ এই অবজেক্টগুলো ফাংশনের ভেতর থেকে মডিফাই করা যায় না।
উদাহরণ
def modify(x):
x = 30 # নতুন অবজেক্ট বানানো হয়েছে, মূলটি অপরিবর্তিত
a = 10
modify(a)
print("a =", a) # আউটপুট: a = 10
ব্যাখ্যা
aহলো একটি ইন্টিজার (ইমিউটেবল)।- ফাংশনের ভেতর
x = 30লিখলে একটি নতুন ইন্টিজার অবজেক্ট তৈরি হয় এবং लोकাল ভেরিয়েবলxসেটি রেফার করে। - মূল
aঅবজেক্টটি অপরিবর্তিত থাকে।
মূল বাত
পাইথন আসলে কল-বাই-অবজেক্ট-রেফারেন্স ফলো করে। কিন্তু ইমিউটেবল অবজেক্টের ক্ষেত্রে যেহেতু সেগুলো পরিবর্তন করা যায় না, তাই এটি কল-বাই-ভ্যালুর মত দাঁড়ায়। মিউটেবল অবজেক্ট (লিস্ট, ডিক্ট) পাস করলে পরিবর্তন মূল অবজেক্টে রিফলেক্ট হয়।