1. استفاده از `is` و `==` برای مقایسه:
-
== برای مقایسه مقادیر استفاده میشه، یعنی آیا محتوای دو شیء مشابه هست یا نه. مثلاً برای لیستها، دیکشنریها و ... -
is برای مقایسه آدرس حافظه (یا همان identity) استفاده میشه. یعنی آیا دو متغیر به همان شیء در حافظه اشاره دارند یا نه. 2. استفاده از حافظه اشتراکی (Interning):
- در پایتون، برای برخی نوع دادهها مثل stringها و tupleها که immutable هستن، پایتون از تکنیک به نام "interning" استفاده میکنه. این یعنی وقتی که دو متغیر به مقدار مشابه اشاره میکنند، پایتون ممکنه از یک شیء مشترک در حافظه استفاده کنه تا حافظه بیشتری مصرف نشه.
- در مورد stringها، این رفتار حتی بیشتر دیده میشه، به طوری که پایتون از حافظه اشتراکی برای stringهای کوتاه و مشابه به شدت استفاده میکنه.
3. چرا این نکات مهم هستن؟
این اطلاعات مهم هستن چون میتونن به درک بهتر از چگونگی مدیریت حافظه در پایتون کمک کنن و در برنامهنویسیهای پیچیده، تفاوتهای ظریفی ایجاد کنن. مثلاً اگر انتظار داشته باشی که دو شیء کاملاً مشابه در حافظه به هم اشاره کنن و از
is استفاده کنی، ممکنه نتیجهای که انتظار داشتی رو نگیری.همچنین در برخی موارد میتونی از
is برای چک کردن اینکه متغیر به None اشاره میکنه یا نه استفاده کنی، چون None یک شیء واحد است در حافظه:x = None
print(x is None) # خروجی: True
@python_with_mohammad