ویدیو تفاوت بین is و == در پایتون

امیرحسین بیگدلو July 2023

 

برای مقایسه آبجکت ها در پایتون میتوان از دو عملگر == و is استفاده کرد. تفاوت ظریفی بین این دو عملگر وجود دارد. ممکن است شنیده باشید که عملگر is از == سرعت بیشتری دارد. یا حس کنید که is پایتونی‌تر است.اما باید به یاد داشته باشید که این دو عملگر در ظاهر به یک شکل کار میکنند اما در باطن تفاوت بزرگی دارند.

 

عملگر == برابری دو آبجکت را بررسی میکند اما عملگر is بررسی میکند که دو آبجکت به یک مقدار در حافظه اشاره کنند.

 

 

 #  مقایسه آبجکت‌ها با is و is not در پایتون

عملگرهای is و is not هویت دو آبجکت را مقایسه میکنند. در CPython این به معنی آدرس حافظه آنها است. هر چیزی در پایتون یک آبجکت است و هر آبجکتی در حافظه مموری ذخیره میشود. دو عملگر is و is not بررسی میکنند که آیا دو آبجکت به یک آدرس در حافظه اشاره میکنند یا خیر.

 

شما میتوانید از متد ()id استفاده کنید و هویت یک آبجکت را بررسی کنید:

>>> help(id)
Help on built-in function id in module builtins:

id(obj, /)
    Return the identity of an object.

    This is guaranteed to be unique among simultaneously existing objects.
    (CPython uses the object's memory address.)

>>> id(id)
2570892442576

 

خط آخر نشان میدهد که خود متد ()id نیز در حافظه ذخیره شده و آدرس آن را نشان میدهد. کد پایین را در نظر بگیرید:

a = [1, 2, 3]
b = a

print(id(a))
print(id(b))
print(a is b)

# OUTPUT
140702576814912
140702576814912
True

 

در کد بالا یک لیست به نام a ساخته‌ایم که مقادیر 1, 2, 3 را در خود ذخیره میکند. در خط بعد متغیر a را در متغیر b ذخیره میکنیم. بعد از گرفتن id هر دو این متغیرها، میبینید که عدد یکسانی را نشان میدهند. این اعداد یکسان نشان میدهند که هر دو متغیر a و b در یک مکان از حافظه ذخیره شده‌اند. پس پاسخ عملگر is برابر با True خواهد بود.

 

حالا کد را تغییر میدهیم:

a = [1, 2, 3]
b = [1, 2, 3]

print(id(a))
print(id(b))
print(a is b)

# OUTPUT
139943112022848
139943112068224
False

در این کد متغیرهای a و b هر دو یک لیست با مقادیر 1, 2, 3 دارند. در این حالت id دو عدد متفاوت نمایش خواهد داد. چون متغیر‌های a و b در یک مکان از حافظه ذخیره نمیشوند، پس عملگر is نتیجه False را نمایش میدهد. درست است که محتوای متغیرهای a و b یکسان هستند اما آدرس حافظه آنها متفاوت است.

 

 

 #  مقایسه آبجکت‌ها با == و =! در پایتون

عملگرهای == و =! برخلاف دو عملگر قبلی، کاری با آدرس حافظه ندارند و فقط محتویات را بررسی میکنند.

 

به کد زیر دقت کنید:

a = [1, 2, 3]
b = a

print(id(a))
print(id(b))
print(a == b)

# OUTPUT
140199362054976
140199362054976
True

در کد بالا میبیند که محتویات و آدرس حافظه هر دو متغیر a و b یکسان است. پس عملگر == نتیجه True را نمایش میدهد. کد بالا را تغییر میدهیم تا آدرس حافظه تغییر کند:

a = [1, 2, 3]
b = [1, 2, 3]

print(id(a))
print(id(b))
print(a == b)

# OUTPUT
140533901888320
140533901933696
True

 

در کد بالا آدرس حافظه تغییر کرده اما از آنجایی که محتویات دو متغیر یکسان است، عملگر == هنوز هم True برمیگرداند.

 

اگر ویدیو بالا را دوست داشتید پیشنهاد میکنیم به مطالب زیر هم سر بزنید:

آموزش عملگر walrus در پایتون

آموزش ماژول pdb در پایتون

دوره های آموزش پروژه محور و پیشرفته پایتون

دوره آموزش پایتون

آموزش برنامه‌نویسی شی گرا در پایتون

ویدیو آموزش function در پایتون

 

ویدیوهای مشابه



ارسال نظر


باب

3 سال قبل پاسخ به نظر

عالی بود

ارسال نظر



samin

3 سال قبل پاسخ به نظر

عالیییی شمام خسته نباشید

ارسال نظر



vahid

3 سال قبل پاسخ به نظر

مرررررررررسی

ارسال نظر



SaLaR

3 سال قبل پاسخ به نظر

Awesome :)
عالی بود =))

ارسال نظر



مونگارد