انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: تفاوت is not با != در پایتون (حل شد)  (دفعات بازدید: 786 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین BiG

  • High Hero Member
  • *
  • ارسال: 1609
  • Windows 7 - Windows xp - Windows 11
تفاوت is not با != در پایتون (حل شد)
« : 06 اسفند 1400، 12:48 ق‌ظ »
سلام دوستان. من در حقیقت نتونستم تفاوت این دو تارو درک کنم.
توی w3schools در موردش نوشته بود ولی ازونجایی که با مترجم دارم متن هارو می خونم زیاد نمیشه متوجه شد منظورش چیه.
ممنون میشم یک نفر که پایتون بلده برام توضیح بده.
در ضمن عنوان تاپیک رو من =! گذاشتم ولی نمی دونم چرا برعکس شده
« آخرین ویرایش: 06 اسفند 1400، 01:56 ق‌ظ توسط Mt »
خداحافظ لینوکس!

آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
پاسخ : تفاوت is not با !=
« پاسخ #1 : 06 اسفند 1400، 01:12 ق‌ظ »
is بررسی میکنه که آیا id دو تا متغیر برابر هستن یا نه ولی == و =! مقدار ذخیره شده در متغیر رو بررسی میکنن
برای دیدن id یکتای هر متغیر میتونید از روش زیر استفاده کنید:
>>> x=3
>>> id(x)
140115927705968

اطلاعات بیشتر درباره id
« آخرین ویرایش: 06 اسفند 1400، 01:14 ق‌ظ توسط Reza Hosseinzadeh »
جست و جو کنید و چیز های جدید بیابید

آفلاین sd70

  • Jr. Member
  • *
  • ارسال: 96
  • جنسیت : پسر
پاسخ : تفاوت is not با !=
« پاسخ #2 : 06 اسفند 1400، 01:15 ق‌ظ »
اگر با C یا C++‎ آشنایی داشته باشید، استفاده از is یا is not مثل مقایسه آدرس حافظه دو متغیره (همون پوینتر). این توضیحیه که در خود راهنمای پایتون ذکر شده:
نقل‌قول
The operators is and is not test for an object’s identity: x is y is true if and only if x and y are the same object. An Object’s identity is determined using the id() function. x is not y yields the inverse truth value.
این تست رو خودتون میتونید انجام بدین. دو تا لیست به نام a و b با اعضای یکسان تعریف کنید:
a = [1,2,3]
b = [1,2,3]
حالا دستور a == b رو اجرا کنید. همون طور که می‌بینید حاصل برابر با True میشه چرا که مقدار دو متغیر a و b یکسانه. اما اگر id های این دو متغیر رو بررسی کنید (تقریبا میشه مشابه پوینتر به یک متغیر در C در نظر گرفتش) می‌بینید که آیدی‌ها متفاوته:
print(id(a))
print(id(b))
متفاوت بودن id به این معنیه که این دو متغیر مربوط به یک آبجکت یکسان نیستند یا به عبارتی به یک بخش از حافظه اشاره ندارند و به همین خاطر حاصل a is b برابر با False میشه. حالا همین توضیحات رو میشه برای ‎!=‎ و is not هم در نظر گرفت.

آفلاین BiG

  • High Hero Member
  • *
  • ارسال: 1609
  • Windows 7 - Windows xp - Windows 11
پاسخ : تفاوت is not با !=
« پاسخ #3 : 06 اسفند 1400، 01:18 ق‌ظ »
جناب حسین زاده شما هم پایتون کار هستید؟ فکر کنم کل اعضای انجمن پایتون کار باشن.
پس با این حال هیچ متغیر هایی id هاشون با هم یکی نیستن. خب اینجوری این دستور چه کاربردی داره؟
خداحافظ لینوکس!

آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
پاسخ : تفاوت is not با !=
« پاسخ #4 : 06 اسفند 1400، 01:29 ق‌ظ »
جناب حسین زاده شما هم پایتون کار هستید؟ فکر کنم کل اعضای انجمن پایتون کار باشن.
پس با این حال هیچ متغیر هایی id هاشون با هم یکی نیستن. خب اینجوری این دستور چه کاربردی داره؟
ممکنه یه متغیر رو برابر یه متغیر دیگه قرار بدید:
>>> x=3
>>> y=x
>>> x is y
True
>>> id(x)
139905738844528
>>> id(y)
139905738844528
در پایتون فعلا این حالت به نظرم میرسه ولی اگر زبان آزادتری مثل C بود، مثال های جالبتری میشد زد.
جست و جو کنید و چیز های جدید بیابید

آفلاین BiG

  • High Hero Member
  • *
  • ارسال: 1609
  • Windows 7 - Windows xp - Windows 11
پاسخ : تفاوت is not با !=
« پاسخ #5 : 06 اسفند 1400، 01:38 ق‌ظ »
جناب حسین زاده شما هم پایتون کار هستید؟ فکر کنم کل اعضای انجمن پایتون کار باشن.
پس با این حال هیچ متغیر هایی id هاشون با هم یکی نیستن. خب اینجوری این دستور چه کاربردی داره؟
ممکنه یه متغیر رو برابر یه متغیر دیگه قرار بدید:
>>> x=3
>>> y=x
>>> x is y
True
>>> id(x)
139905738844528
>>> id(y)
139905738844528
در پایتون فعلا این حالت به نظرم میرسه ولی اگر زبان آزادتری مثل C بود، مثال های جالبتری میشد زد.
این شناسه ها مشخص می کنه که در چه بخشی از حافظه قرار دارند؟
یعنی اگر شناسه y با x یکی باشه اگر مقدار یکی از این دو تارو تغییر بدیم، مقدار اون یکی هم عوض میشه؟
چطور میشه مقدار x رو ریخت توی y اما با شناسه متفاوت؟
خداحافظ لینوکس!

آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
پاسخ : تفاوت is not با !=
« پاسخ #6 : 06 اسفند 1400، 01:42 ق‌ظ »
جناب حسین زاده شما هم پایتون کار هستید؟ فکر کنم کل اعضای انجمن پایتون کار باشن.
پس با این حال هیچ متغیر هایی id هاشون با هم یکی نیستن. خب اینجوری این دستور چه کاربردی داره؟
ممکنه یه متغیر رو برابر یه متغیر دیگه قرار بدید:
>>> x=3
>>> y=x
>>> x is y
True
>>> id(x)
139905738844528
>>> id(y)
139905738844528
در پایتون فعلا این حالت به نظرم میرسه ولی اگر زبان آزادتری مثل C بود، مثال های جالبتری میشد زد.
این شناسه ها مشخص می کنه که در چه بخشی از حافظه قرار دارند؟
یعنی اگر شناسه y با x یکی باشه اگر مقدار یکی از این دو تارو تغییر بدیم، مقدار اون یکی هم عوض میشه؟
چطور میشه مقدار x رو ریخت توی y اما با شناسه متفاوت؟
یه چیزی که الآن متوجه شدم (اگر درست متوجه شده باشم)، در مثال بالا اگر مقدار y رو عوض کنید، idش عوض میشه و متفاوت از x میشه:
>>> x=3
>>> y=x
>>> x is y
True
>>> y+=1
>>> x is y
False
جست و جو کنید و چیز های جدید بیابید

آفلاین 🇮🇷

  • رضا حسین‌زاده
  • High Hero Member
  • *
  • ارسال: 1001
  • کنجکاو
    • Reza
پاسخ : تفاوت is not با !=
« پاسخ #7 : 06 اسفند 1400، 01:46 ق‌ظ »
چطور میشه مقدار x رو ریخت توی y اما با شناسه متفاوت؟
در ضمن شما اگر مقدار x رو در y ذخیره کنید بدون اینکه حتی اشاره ای به x بکنید، بازم پایتون بطور خودکار برابری شون رو تشخیص میده و یه id برابر براشون در نظر میگیره و در نتیجه در یک آدرس ذخیره ش میکنه:
>>> x=3
>>> y=3
>>> x is y
True
جست و جو کنید و چیز های جدید بیابید

آفلاین BiG

  • High Hero Member
  • *
  • ارسال: 1609
  • Windows 7 - Windows xp - Windows 11
پاسخ : تفاوت is not با !=
« پاسخ #8 : 06 اسفند 1400، 01:55 ق‌ظ »
ممنون بزرگواران!
خداحافظ لینوکس!