همانطور که یک کیلوگرم سیب و یک کیلوگرم گلابی وزن برابر و جنس متفاوتی دارند، عدد صحیح 1 و عدد اعشاری 1.0 هم مقدار برابر ولی جنس متفاوتی دارند.
عملگر is در پایتون بهطور خاص برای مقایسه هویت اشیا طراحی شده است و با عملگر == که برای مقایسه مقادیر استفاده میشود، تفاوتهای مهمی دارد. در ادامه، به بررسی دقیق عملگر is، کاربردهای آن و تفاوتهایش با سایر عملگرها میپردازم اما قبل از آن بهتر است نیمنگاهی به تابع id() داشته باشیم.
تابع id()
این تابع یک شی را به عنوان ورودی میگیرد و آدرس آن در حافظه رم را در قالب یک عدد برمیگرداند.
name = 'CodeBaz.dev'
print(id(name)) # output: 133707097800880اگر دو متغیر را به این تابع ارسال کنیم و برای هر دو خروجی یکسانی داشته باشیم درواقع هر دو متغیر به یک شی در حافظه اشاره میکنند.
name = 'CodeBaz.dev'
name2 = 'CodeBaz.dev'
print(id(name)) # output: 133707097800880
print(id(name2)) # output: 133707097800880درک رفتار عملگر is
عملگر is بررسی میکند که آیا دو متغیر به یک شیء مشابه در حافظه اشاره میکنند یا خیر. به بیان ساده:
- اگر دو متغیر به یک مکان یکسان در حافظه اشاره کنند، نتیجه
isبرابر باTrueاست. - اگر دو متغیر به اشیاء متفاوتی (حتی با مقادیر یکسان) اشاره کنند، نتیجه
isبرابر باFalseخواهد بود.
x = [1, 2, 3]
y = x
z = [1, 2, 3]
print(x is y) # خروجی: True
print(x is z) # خروجی: Falseدر این مثال، x و y به یک لیست مشابه در حافظه اشاره میکنند، اما z یک لیست جداگانه است که صرفاً مقدارش با x برابر است.
تفاوت is و ==
isبررسی میکند که آیا دو متغیر دقیقاً به یک شیء اشاره میکنند.==بررسی میکند که آیا مقادیر دو شیء برابر هستند یا خیر.
= [1, 2, 3]
y = [1, 2, 3]
print(x == y) # خروجی: True (چون مقادیرشان برابر است)
print(x is y) # خروجی: False (چون به اشیاء متفاوتی اشاره میکنند)نکته مهم
- از
isبرای مقایسه مقدار استفاده نکنید. همیشه از==برای مقایسه مقادیر استفاده کنید.