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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: BiG در 06 اسفند 1400، 12:48 ق‌ظ

عنوان: تفاوت is not با != در پایتون (حل شد)
ارسال شده توسط: BiG در 06 اسفند 1400، 12:48 ق‌ظ
سلام دوستان. من در حقیقت نتونستم تفاوت این دو تارو درک کنم.
توی w3schools در موردش نوشته بود ولی ازونجایی که با مترجم دارم متن هارو می خونم زیاد نمیشه متوجه شد منظورش چیه.
ممنون میشم یک نفر که پایتون بلده برام توضیح بده.
در ضمن عنوان تاپیک رو من =! گذاشتم ولی نمی دونم چرا برعکس شده
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: 🇮🇷 در 06 اسفند 1400، 01:12 ق‌ظ
is بررسی میکنه که آیا id دو تا متغیر برابر هستن یا نه ولی == و =! مقدار ذخیره شده در متغیر رو بررسی میکنن
برای دیدن id یکتای هر متغیر میتونید از روش زیر استفاده کنید:
>>> x=3
>>> id(x)
140115927705968

اطلاعات بیشتر درباره id (https://www.geeksforgeeks.org/id-function-python/)
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: sd70 در 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 هم در نظر گرفت.
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: BiG در 06 اسفند 1400، 01:18 ق‌ظ
جناب حسین زاده شما هم پایتون کار هستید؟ فکر کنم کل اعضای انجمن پایتون کار باشن.
پس با این حال هیچ متغیر هایی id هاشون با هم یکی نیستن. خب اینجوری این دستور چه کاربردی داره؟
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: 🇮🇷 در 06 اسفند 1400، 01:29 ق‌ظ
جناب حسین زاده شما هم پایتون کار هستید؟ فکر کنم کل اعضای انجمن پایتون کار باشن.
پس با این حال هیچ متغیر هایی id هاشون با هم یکی نیستن. خب اینجوری این دستور چه کاربردی داره؟
ممکنه یه متغیر رو برابر یه متغیر دیگه قرار بدید:
>>> x=3
>>> y=x
>>> x is y
True
>>> id(x)
139905738844528
>>> id(y)
139905738844528
در پایتون فعلا این حالت به نظرم میرسه ولی اگر زبان آزادتری مثل C بود، مثال های جالبتری میشد زد.
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: BiG در 06 اسفند 1400، 01:38 ق‌ظ
جناب حسین زاده شما هم پایتون کار هستید؟ فکر کنم کل اعضای انجمن پایتون کار باشن.
پس با این حال هیچ متغیر هایی id هاشون با هم یکی نیستن. خب اینجوری این دستور چه کاربردی داره؟
ممکنه یه متغیر رو برابر یه متغیر دیگه قرار بدید:
>>> x=3
>>> y=x
>>> x is y
True
>>> id(x)
139905738844528
>>> id(y)
139905738844528
در پایتون فعلا این حالت به نظرم میرسه ولی اگر زبان آزادتری مثل C بود، مثال های جالبتری میشد زد.
این شناسه ها مشخص می کنه که در چه بخشی از حافظه قرار دارند؟
یعنی اگر شناسه y با x یکی باشه اگر مقدار یکی از این دو تارو تغییر بدیم، مقدار اون یکی هم عوض میشه؟
چطور میشه مقدار x رو ریخت توی y اما با شناسه متفاوت؟
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: 🇮🇷 در 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
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: 🇮🇷 در 06 اسفند 1400، 01:46 ق‌ظ
چطور میشه مقدار x رو ریخت توی y اما با شناسه متفاوت؟
در ضمن شما اگر مقدار x رو در y ذخیره کنید بدون اینکه حتی اشاره ای به x بکنید، بازم پایتون بطور خودکار برابری شون رو تشخیص میده و یه id برابر براشون در نظر میگیره و در نتیجه در یک آدرس ذخیره ش میکنه:
>>> x=3
>>> y=3
>>> x is y
True
عنوان: پاسخ : تفاوت is not با !=
ارسال شده توسط: BiG در 06 اسفند 1400، 01:55 ق‌ظ
ممنون بزرگواران!