Identity Operators

দুইটা অবজেক্টকে compare করার জন্য Identity Operators ব্যবহার করা হয়। যদি অবজেক্ট এর মেমোরি লোকেশন আলাদা হয় তখন দুইটি অবজেক্টকে আলাদা আলাদা অবজেক্ট হিসাবে দেখে।

operator

description

is

সত্য হবে যখন দুইটা অবজেক্ট এর মেমোরি লোকেশন same হবে

Is not

সত্য হবে যখন দুইটা অবজেক্ট এর মেমোরি লোকেশন আলাদা হবে

এটা বোঝার জন্য আমাদের পাইথন অবজেক্ট কে ভালোভাবে বুঝতে হবে।

পাইথন এ অনেক ধরণের ক্লাস based অবজেক্ট আছে যেমন ইন্টিজার ,লিস্ট ,স্ট্রিং ,আমাদের নিজেদের ক্লাস এর তৈরী অবজেক্ট

কিছু কিছু ক্লাসের অবজেক্ট তৈরির পর ওই অবজেক্ট এর state পরবর্তীতে পরিবর্তন করা যায়। এই সমস্ত অবজেক্টকে mutable অবজেক্ট বলে।যেমন লিস্ট

a = [1, 2, 3]
a.append(4)
print(a) # Output: [1, 2, 3, 4]

mutable অবজেক্ট

প্রত্যেকটি mutable অবজেক্ট আলাদা আলাদা মেমোরি লোকেশন এ সেভ হয় যদিও তাদের ভ্যালু একই হয়।

num1 = [5,10,15]
num2 = [5,10,15]
#শো ডিফারেন্ট লোকেশন
print(id(num1))
print(id(num2))

Output 👍

140501122971904
140501123006912

উপরের দুইটি অবজেক্টকে আমরা যদি অবজেক্ট আইডেন্টিফায়ার অপারেটর is দ্বারা চেক করি তাহলে যেহেতু অবজেক্ট দুইটি same নয় সেজন্য False রিটার্ন করবে।

num1 = [5,10,15]
num2 = [5,10,15]
print(num1 is num2)

Output : False immutable অবজেক্ট : অবজেক্ট তৈরির পর ওই অবজেক্ট এর state পরবর্তীতে পরিবর্তন না করা গেলে সেটা immutable অবজেক্ট Example integer .

immutable অবজেক্ট আইডেন্টিফায়ার এর ক্ষেত্রে যদি দুইটা অবজেক্ট এর ভ্যালু আলাদা হয় তখন পাইথন দুইটি আলাদা অবজেক্ট তৈরী করে মেমোরি লোকেশন এ সেভ করে

mutable

lists, dictionaries, sets, and user-defined objects (classes)

Immutable

integers, floating-point numbers, strings, tuples, and frozen sets

is

a = 10
b = 20
print(a is b )

Output

 False

কিন্তু যদি immutable অবজেক্ট দুইটির ভ্যালু একই হয় তখন পাইথন মেমোরি অপ্টিমাইজ এর জন্য প্রথমে প্রথম অবজেক্ট তৈরী করবে এবং পরবর্তী ভ্যারিয়েবল এর জন্য নতুন কোন মেমোরি লোকেশন নেবে না প্রথম অবজেক্ট এর মেমোরি লোকেশন কে দ্বিতীয় অবজেক্ট এর মেমোরি লোকেশন হিসাবে সেট করবে।

a = 10
b = 10
print(a is b )

Output : True

এটা যেভাবে কাজ করেছে :

A = 10 # একটা মেমোরি লোকেশন সেট করেছে

B = 10 # এটা যেভাবে কাজ করেছে :

একটা মেমোরি লোকেশন সেট করেছে পরবর্তীতে যখন দেখেছে b এর ভ্যালু a এর same value তখন b=a . অর্থাৎ b এর ভ্যালু a এর মেমোরি লোকেশন এ আছে। যখন অবজেক্ট এর মেমোরি লোকেশন আলাদা হয় তখন is মিথ্যা রিটার্ন করে।

is not

is এর বিপরীত হলো is not . যখন দুইটা অবজেক্ট আলাদা হবে তখনি সত্য হবে।

a = 10
b = 10
print(a is not b )

Output: False

Last updated