'==' বা 'হয়' ব্যবহার করে স্ট্রিংগুলির তুলনা কেন কখনও কখনও আলাদা ফলাফল করে?


1146

আমি পাইথন প্রোগ্রাম পেয়েছি যেখানে দুটি ভেরিয়েবলের মান সেট করা হয় 'public'। শর্তাধীন অভিব্যক্তিতে আমার তুলনা রয়েছে var1 is var2যা ব্যর্থ হয়েছে, তবে আমি যদি এটিতে এটি পরিবর্তন করি var1 == var2তবে ফিরে আসে True

এখন আমি যদি আমার পাইথন ইন্টারপ্রেটারটি খুলি এবং একই "তুলনা" তুলনা করি তবে এটি সফল হয়।

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True

আমি এখানে কি মিস করছি?



3
আপনি যেমন:: এর মাধ্যমে কনসোল ইনপুট পড়ার পরেও এই সমস্যা দেখা দেয় input = raw_input("Decide (y/n): ")। এক্ষেত্রে "y" এর একটি ইনপুট এবং if input == 'y':"সত্য" প্রত্যাবর্তন করবে এবং if input is 'y':মিথ্যা ফিরিয়ে দেবে।
সেমজান ম্যাসিঞ্জার

4
এই ব্লগটি উত্তরগুলির চেয়ে আরও অনেক সম্পূর্ণ ব্যাখ্যা সরবরাহ করেছে guilload.com/python-string-interning
Chris_Rands

1
@ ক্রিস-রিকো উল্লেখ হিসাবে, আমি মহান ব্যাখ্যা এখানে stackoverflow.com/q/15541404/1695680
ThorSummoner

উত্তর:


1532

isপরিচয় পরীক্ষা, ==সমতা পরীক্ষা। আপনার কোডে যা ঘটে তা দোভাষী হিসাবে অনুকরণ করা হবে:

>>> a = 'pub'
>>> b = ''.join(['p', 'u', 'b'])
>>> a == b
True
>>> a is b
False

সুতরাং, আশ্চর্যের কিছু নেই যে তারা ঠিক একই নয়?

অন্য কথায়: isহয়id(a) == id(b)


17
আহ কি এক? বনাম সমান? স্কিম, এটি পেয়েছি।
jottos

47
বা জাভা মধ্যে ==বনাম .equals()। সর্বোত্তম অংশটি হ'ল পাইথন ==জাভাটির সাথে সাদৃশ্যপূর্ণ নয় ==
ম্যাট্রিক্সফ্রোগ

11
@ Крайст: কেবলমাত্র একক Noneমান আছে। সুতরাং এটির সর্বদা একই আইডি থাকে।
সাইলেন্টগোস্ট

18
এটি অপের "হ'ল -> সত্য" উদাহরণটিকে সম্বোধন করে না।
ব্যবহারকারী 2864740

6
@AlexanderSupertramp, কারণ স্ট্রিং interning
ক্রিস রিকো

569

: এখানে অন্য উত্তর সঠিক হয় isজন্য ব্যবহার করা হয় পরিচয় তুলনা যখন ==জন্য ব্যবহার করা হয় সমতা তুলনা। যেহেতু আপনি যা যত্নশীল তা সমতা (দুটি স্ট্রিং একই অক্ষর ধারণ করে), এক্ষেত্রে isঅপারেটরটি কেবল ভুল এবং ==পরিবর্তে আপনার ব্যবহার করা উচিত ।

isইন্টারেক্টিভভাবে কাজ করার কারণটি হ'ল (বেশিরভাগ) স্ট্রিং লিটারালগুলি ডিফল্টরূপে ইন্টার্ন করা হয়। উইকিপিডিয়া থেকে:

অভ্যন্তরীণ স্ট্রিংগুলি স্ট্রিং তুলনাগুলিকে গতি দেয় যা কখনও কখনও অ্যাপ্লিকেশনগুলিতে (যেমন সংকলক এবং গতিশীল প্রোগ্রামিং ল্যাঙ্গুয়েজ রানটাইমস) একটি পারফরম্যান্স বাধা হয়ে থাকে যা স্ট্রিং কীগুলির সাথে হ্যাশ টেবিলগুলিতে প্রচুর পরিমাণে নির্ভর করে। ইন্টার্নিং ছাড়াই, দুটি পৃথক স্ট্রিং সমান কিনা তা পরীক্ষা করে উভয় স্ট্রিংয়ের প্রতিটি চরিত্র পরীক্ষা করা জড়িত। এটি বেশ কয়েকটি কারণে ধীর: এটি স্ট্রিংগুলির দৈর্ঘ্যে সহজাতভাবে O (n) হয়; এটি সাধারণত মেমরির বিভিন্ন অঞ্চল থেকে পড়া প্রয়োজন, যা সময় নেয়; এবং পাঠ্যগুলি প্রসেসরের ক্যাশে পূরণ করে, যার অর্থ অন্যান্য প্রয়োজনের জন্য কম ক্যাশে উপলব্ধ। ইন্টার্নযুক্ত স্ট্রিংগুলির সাথে, মূল ইন্টার্ন অপারেশনের পরে একটি সাধারণ অবজেক্ট আইডেন্টিটি টেস্ট যথেষ্ট; এটি সাধারণত পয়েন্টার সমতা পরীক্ষা হিসাবে প্রয়োগ করা হয়,

সুতরাং, যখন আপনার প্রোগ্রামে একই মানযুক্ত দুটি স্ট্রিং আক্ষরিক (আক্ষরিক অর্থে আপনার প্রোগ্রাম উত্স কোডে টাইপ করা শব্দগুলি, উদ্ধৃতি চিহ্ন দ্বারা বেষ্টিত) থাকে তখন পাইথন সংকলক স্বয়ংক্রিয়ভাবে স্ট্রিংগুলি অভ্যন্তরীণ করে দেবে, সেগুলি উভয়কে একই স্টোরে সঞ্চিত করে তুলবে মেমরি অবস্থান। (মনে রাখবেন যে এটি সর্বদা ঘটে না , এবং যখন এটি ঘটে তার নিয়মগুলি বেশ বিশৃঙ্খল হয়, সুতরাং দয়া করে উত্পাদন কোডে এই আচরণের উপর নির্ভর করবেন না!)

যেহেতু আপনার ইন্টারেক্টিভ সেশনে উভয় স্ট্রিংগুলি একই মেমরির স্থানে সংরক্ষণ করা হয়, তাদের একই পরিচয় রয়েছে , তাই isঅপারেটর প্রত্যাশা অনুযায়ী কাজ করে। তবে আপনি যদি অন্য কোনও পদ্ধতিতে স্ট্রিং তৈরি করেন (এমনকি সেই স্ট্রিংটিতে ঠিক একই অক্ষর থাকে) তবে স্ট্রিংটি সমান হতে পারে তবে এটি একই স্ট্রিং নয় - এটির আলাদা আলাদা পরিচয় রয়েছে কারণ এটি স্মৃতিতে আলাদা জায়গায় সঞ্চিত।


6
যখন স্ট্রিংগুলি অভ্যন্তরীণ করা হবে তখন কেউ বিভ্রান্ত নিয়মের বিষয়ে আরও কোথায় পড়তে পারেন?
নোকটিস স্কাইটিওয়ার

88
একটি সম্পূর্ণ ব্যাখ্যা জন্য +1। অন্যান্য উত্তর কীভাবে আসলে কী ঘটেছে তা ব্যাখ্যা না করে কীভাবে এতগুলি আপত্তি পেয়েছিল তা নিশ্চিত নয়।
That1Guy

4
আমি প্রশ্নটি পড়তে গিয়ে ঠিক এটাই ভাবছিলাম। স্বীকৃত উত্তরটি সংক্ষিপ্ত হলেও সত্যটি রয়েছে তবে এই উত্তরটি বিষয়গুলির থেকে আরও ভাল ব্যাখ্যা করে । নিস!
Sнаđошƒаӽ

3
@NoctisSkytower googled একই এবং এই পাওয়া guilload.com/python-string-interning
xtreak

5
@ ননট ১০১১: না, আপনি কী ধরণের চেক চান তার মধ্যে ==এবং তার isউপর ভিত্তি করে নিয়মটি বেছে নেওয়া হবে । আপনি যদি স্ট্রিংগুলি সমান হবার বিষয়ে চিন্তা করেন (এটি একই সামগ্রীতে রয়েছে) তবে আপনার সর্বদা ব্যবহার করা উচিত ==। কোনও দুটি পাইথন নাম একই বস্তুর উদাহরণকে উল্লেখ করে কিনা সে বিষয়ে আপনি যদি যত্নশীল হন তবে আপনার ব্যবহার করা উচিত is। আপনার প্রয়োজন হতে পারে isযদি আপনি এমন কোড লিখছেন যা সেগুলির বিষয়বস্তুগুলি যত্ন না নিয়েই প্রচুর বিভিন্ন মানকে পরিচালনা করে, বা অন্যথায় যদি আপনি জানেন যে এখানে কেবলমাত্র একটির কিছু রয়েছে এবং আপনি সেই জিনিসটির ভান করে অন্যান্য বিষয়বস্তু উপেক্ষা করতে চান। আপনি যদি নিশ্চিত না হন তবে সর্বদা বেছে নিন ==
ড্যানিয়েল প্রাইডেন

108

isযখন শব্দ বস্তুর পরিচয়ের জন্য একটি পরীক্ষা ==একটি মান তুলনা হয়।

আপনি যদি ব্যবহার করেন isতবে ফলাফলটি সত্য হবে যদি এবং কেবলমাত্র যদি একই জিনিস হয় object যাইহোক, ==অবজেক্টের মান একই হবে যে কোনও সময় সত্য হবে।


57

একটি লক্ষণীয় বিষয়, আপনি sys.internএকই স্ট্রিংয়ের একটি রেফারেন্স পাচ্ছেন তা নিশ্চিত করতে আপনি ফাংশনটি ব্যবহার করতে পারেন :

>>> from sys import intern
>>> a = intern('a')
>>> a2 = intern('a')
>>> a is a2
True

উপরে উল্লিখিত হিসাবে, আপনি isস্ট্রিং এর সমতা নির্ধারণ করতে ব্যবহার করা উচিত নয় । তবে আপনার যদি ব্যবহার করার কোনও ধরণের অদ্ভুত প্রয়োজনীয়তা রয়েছে তা জানতে এটি সহায়ক হতে পারে is

দ্রষ্টব্য যে internফাংশনটি পাইথন 2 এ বিল্টিন হিসাবে ব্যবহৃত হত তবে sysপাইথন 3- এ মডিউলে স্থানান্তরিত হয়েছিল ।


43

isপরিচয় পরীক্ষা, ==সমতা পরীক্ষা। এর অর্থ কী এটি isহ'ল দুটি জিনিস একই জিনিস, বা কেবল সমমান whether

বলুন যে আপনি একটি সহজ personজিনিস পেয়েছেন । যদি এটির নাম 'জ্যাক' রাখা হয় এবং এটি '23' বছর বয়সী হয় তবে এটি অন্য 23 বছর বয়সী জ্যাকের সমতুল্য, তবে এটি একই ব্যক্তির নয়।

class Person(object):
   def __init__(self, name, age):
       self.name = name
       self.age = age

   def __eq__(self, other):
       return self.name == other.name and self.age == other.age

jack1 = Person('Jack', 23)
jack2 = Person('Jack', 23)

jack1 == jack2 #True
jack1 is jack2 #False

তারা একই বয়স, কিন্তু তারা একই ব্যক্তির উদাহরণ নয়। একটি স্ট্রিং অন্যজনের সমতুল্য হতে পারে তবে এটি একই জিনিস নয়।


আপনি যদি সেটটি পরিবর্তন করেন তবে সেটি পরিবর্তন jack1.age = 99হবে না jack2.age। কারণ এটি দুটি ভিন্ন উদাহরণ, তাই jack1 is not jack2। তবে, jack1 == jack2নাম এবং বয়স একই হলে তারা একে অপরের সমান হতে পারে । এটি স্ট্রিংগুলির জন্য আরও জটিল হয়ে ওঠে, কারণ পাইথনগুলিতে স্ট্রিংগুলি অবিচ্ছেদ্য এবং পাইথন প্রায়শই একই ঘটনা পুনরায় ব্যবহার করে। আমি এই ব্যাখ্যাটি পছন্দ করি কারণ এটি সাধারণ কেসগুলি (একটি সাধারণ অবজেক্ট) ব্যবহার করে বরং বিশেষ ক্ষেত্রে (স্ট্রিং) ব্যবহার করে।
ফ্লিম

37

এটি একটি পার্শ্ব নোট, কিন্তু অহঙ্কারী অজগরটিতে, আপনি প্রায়শই এই জাতীয় জিনিস দেখতে পাবেন:

if x is None: 
    # some clauses

এটি নিরাপদ, কারণ নাল অবজেক্টের (যেমন, কিছুই নয়) এর একটি উদাহরণ থাকার নিশ্চয়তা রয়েছে


1
সত্য এবং মিথ্যা জন্য একই? একটাই উদাহরণ মিলবে কি?
হ্যান্ডিম্যানডান

1
@ হ্যান্ডিমনডান হ্যাঁ, তারা পাইথন 2 এবং 3 এ উভয়ই
সিঙ্গেলন

@ কমিলিটউ তবে পাইথন 2 এ আপনি মিথ্যা এবং সত্যকে পুনরায় সাইন করতে পারেন।
মার্টিজন পিটারস

28

আপনি কী করছেন সে বিষয়ে যদি আপনি নিশ্চিত না হন তবে '==' ব্যবহার করুন। আপনার যদি এটি সম্পর্কে আরও কিছুটা জ্ঞান থাকে তবে আপনি 'কিছুই নেই' এর মতো পরিচিত জিনিসগুলির জন্য 'হ'ল ব্যবহার করতে পারেন।

অন্যথায় আপনি ভাবছেন যে জিনিসগুলি কেন কাজ করে না এবং কেন এটি ঘটে:

>>> a = 1
>>> b = 1
>>> b is a
True
>>> a = 6000
>>> b = 6000
>>> b is a
False

আমিও নিশ্চিত নই যে বিভিন্ন জিনিসগুলি অজগর সংস্করণ / বাস্তবায়নের মধ্যে কিছু জিনিস একই থাকার গ্যারান্টিযুক্ত কিনা।


1
কীভাবে কীটপতঙ্গ পুনরায় অর্পণ করা এই অবস্থাটিকে ট্রিগার করে তা দেখানো আকর্ষণীয় উদাহরণ। কেন এই ব্যর্থ হয়েছে? এটি ইন্টার্ন-ইনিংয়ের কারণে বা অন্য কোনও কিছুর কারণে?
পল

দোভাষী বাস্তবায়নের কারণে কারণটি মিথ্যা প্রত্যাবর্তনের কারণ হতে পারে বলে মনে হচ্ছে: স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / ১৩২৯৮৮/২
পল


@ অর্কিটজাইন হ্যাঁ, এই লিঙ্কগুলি এটি বেশ ভালভাবে ব্যাখ্যা করেছে। আপনি যখন এগুলি পড়েন, আপনি জানতে পারবেন আপনি কী 'নাম্বার' ব্যবহার করতে পারেন। আমি কেবল ইচ্ছুক তারা তা ব্যাখ্যা করবে কেন এটি করা এখনও ভাল ধারণা নয় :) আপনি এটি জানার পরেও সবাইকে যেমন করে তা ধরে নেওয়া ভাল ধারণা হয় না (বা অভ্যন্তরীণ সংখ্যার পরিসরটি কখনই পরিবর্তিত হবে না)
ম্যাটিয়াস নীলসন

20

পাইথনের সাথে আমার সীমিত অভিজ্ঞতা থেকে isদুটি বস্তুর তুলনা করতে এটি ব্যবহার করা হয় এটি একই মান হিসাবে দুটি পৃথক বস্তুর বিপরীতে একই বস্তু কিনা তা দেখতে। ==মানগুলি অভিন্ন কিনা তা নির্ধারণ করতে ব্যবহৃত হয়।

এখানে একটি ভাল উদাহরণ:

>>> s1 = u'public'
>>> s2 = 'public'
>>> s1 is s2
False
>>> s1 == s2
True

s1একটি ইউনিকোড স্ট্রিং এবং s2এটি একটি সাধারণ স্ট্রিং। এগুলি একই ধরণের নয়, তবে একই মান।


17

আমি মনে করি এটির সাথে এটি করার দরকার আছে যে, 'যখন' তুলনাটি মিথ্যাতে মূল্যায়ন করলে দুটি স্বতন্ত্র বস্তু ব্যবহৃত হয় used যদি এটি সত্য হিসাবে মূল্যায়ন করে, এর অর্থ অভ্যন্তরীণভাবে এটি একই সঠিক অবজেক্টটি ব্যবহার করছে এবং একটি নতুন তৈরি করছে না, সম্ভবত আপনি এটি 2 বা সেকেন্ডের একটি ভগ্নাংশের মধ্যে এগুলি তৈরি করেছেন এবং কারণ এটি অপ্টিমাইজড এবং এর মধ্যে কোনও দীর্ঘ সময়ের ব্যবধান নেই and একই জিনিস ব্যবহার করে।

এই কারণেই আপনাকে স্ট্রিং অবজেক্টের মান তুলনা করতে ==না করে সমতা অপারেটরটি ব্যবহার করা উচিত is

>>> s = 'one'
>>> s2 = 'two'
>>> s is s2
False
>>> s2 = s2.replace('two', 'one')
>>> s2
'one'
>>> s2 is s
False
>>> 

এই উদাহরণে, আমি এস 2 তৈরি করেছিলাম, যা আগে আলাদা আলাদা স্ট্রিং অবজেক্ট ছিল যা 'এক' এর সমান ছিল তবে এটি একইরূপ বস্তু নয় s, কারণ আমি প্রথমদিকে এটি 'ওয়ান' হিসাবে নির্ধারিত না হওয়ায় অনুবাদক একই বস্তুটি ব্যবহার করেননি, আমার কাছে থাকলে এটি তাদের একই জিনিস তৈরি করত।


3
.replace()এই প্রসঙ্গে উদাহরণ হিসাবে ব্যবহার করা সম্ভবত সেরা নয়, যদিও এর শব্দার্থবিজ্ঞানগুলি বিভ্রান্তিকর হতে পারে। সর্বদা একটি নতুন স্ট্রিং অবজেক্ট তৈরি s2 = s2.replace()করবে , নতুন স্ট্রিং অবজেক্টকে নির্ধারিত করবে এবং তারপরে ব্যবহৃত পংক্ত বস্তুটি নিষ্পত্তি করবে । আপনি এমনকি না থাকলে আপনি এখনও একটি নতুন স্ট্রিং অবজেক্ট পাবেন। s2s2s = s.replace('one', 'one')
ড্যানিয়েল প্রাইডেন 16

13

আমি বিশ্বাস করি যে এটি "ইন্টার্নড" স্ট্রিং হিসাবে পরিচিত। পাইথন এটি করে, জাভাও তাই করে এবং অপ্টিমাইজড মোডগুলিতে সংকলন করার সময় সি এবং সি ++ করে।

আপনি যদি দুটি স্ট্রিং অবজেক্ট তৈরি করে মেমরি নষ্ট করার পরিবর্তে দুটি অভিন্ন স্ট্রিং ব্যবহার করেন তবে একই বিষয়বস্তুযুক্ত সমস্ত ইন্টার্নযুক্ত স্ট্রিং একই স্মৃতিতে নির্দেশ করে।

পাইথনের এই ফলাফলগুলি হ'ল "অপারেটর ট্রু রিটার্নিং কারণ একই বিষয়বস্তু সহ দুটি স্ট্রিং একই স্ট্রিং অবজেক্টে নির্দেশ করছে। এটি জাভা এবং সি-তেও ঘটবে

যদিও এটি কেবল মেমরি সাশ্রয়ের জন্য দরকারী। স্ট্রিং সমতা পরীক্ষা করার জন্য আপনি এটির উপর নির্ভর করতে পারবেন না, কারণ বিভিন্ন দোভাষী এবং সংকলক এবং জেআইটি ইঞ্জিন সর্বদা এটি করতে পারে না।


12

প্রশ্নটি পুরানো হওয়া সত্ত্বেও আমি প্রশ্নের উত্তর দিচ্ছি কারণ উপরের কোনও উত্তর ভাষার উল্লেখকে উদ্ধৃত করে না

প্রকৃতপক্ষে অপারেটরটি পরিচয়ের জন্য অপারেটর পরীক্ষা করে এবং == অপারেটর সমতার জন্য পরীক্ষা করে,

ভাষার রেফারেন্স থেকে:

প্রকারগুলি বস্তুর আচরণের প্রায় সমস্ত দিককেই প্রভাবিত করে। এমনকি অবজেক্টের পরিচয়ের গুরুত্বও কিছুটা অর্থে প্রভাবিত হয়: অপরিবর্তনীয় প্রকারের জন্য, নতুন মানগুলি গণনা করে এমন ক্রিয়াকলাপগুলি আসলে একই ধরণের এবং মান সহ যে কোনও বিদ্যমান বস্তুর রেফারেন্স ফিরিয়ে দিতে পারে, যখন পরিবর্তনীয় বস্তুর জন্য এটি অনুমোদিত নয় । উদাহরণস্বরূপ, ক = 1 পরে; b = 1, a এবং b বাস্তবায়নের উপর নির্ভর করে মান একের সাথে একই বস্তুকে উল্লেখ করতে পারে বা নাও করতে পারে, তবে সি = [] এর পরে; d = [], সি এবং ডি দুটি পৃথক, অনন্য, সদ্য নির্মিত খালি তালিকার উল্লেখ করার গ্যারান্টিযুক্ত। (দ্রষ্টব্য যে সি = ডি = [] সি এবং ডি উভয়কে একই বস্তু নির্ধারণ করে)

সুতরাং উপরের বিবৃতি থেকে আমরা অনুমান করতে পারি যে একটি স্ট্রিং যা অপরিবর্তনীয় টাইপগুলি "হয়" এর সাথে চেক করলে ব্যর্থ হতে পারে এবং "আছে" এর সাথে চেক করলে সফল পরীক্ষা করা যেতে পারে

একই ইনট, টুপলের জন্য প্রযোজ্য যা অপরিবর্তনীয় প্রকারের


8

==অপারেটর পরীক্ষা মান সমানতা। isঅপারেটর পরীক্ষার বস্তু পরিচয়, কিনা দুই পাইথন পরীক্ষার সত্যিই একই বস্তুর (অর্থাত, মেমরি একই ঠিকানার লাইভ) হয়।

>>> a = 'banana'
>>> b = 'banana'
>>> a is b 
True

এই উদাহরণে, পাইথন শুধুমাত্র একটি স্ট্রিং অবজেক্ট নির্মিত, এবং উভয় aএবং bএটা বোঝায়। কারণটি হ'ল পাইথন অভ্যন্তরীণভাবে কিছু স্ট্রিংকে একটি অপ্টিমাইজেশন হিসাবে ক্যাশে করে এবং পুনরায় ব্যবহার করে, মেমরিতে কেবল একটি স্ট্রিং 'কলা' থাকে, এ এবং বি দ্বারা ভাগ করা হয়; স্বাভাবিক আচরণটি ট্রিগার করতে আপনার আরও দীর্ঘ স্ট্রিং ব্যবহার করতে হবে:

>>> a = 'a longer banana'
>>> b = 'a longer banana'
>>> a == b, a is b
(True, False)

আপনি যখন দুটি তালিকা তৈরি করেন, আপনি দুটি বস্তু পাবেন:

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> a is b
False

এই ক্ষেত্রে আমরা বলব যে দুটি তালিকা সমান, কারণ তাদের একই উপাদান রয়েছে, তবে অভিন্ন নয়, কারণ তারা একই বস্তু নয়। দুটি বস্তু যদি অভিন্ন হয় তবে সেগুলিও সমান, তবে তারা যদি সমান হয় তবে তা অগত্যা অভিন্ন নয়।

যদি aকোনও বস্তুকে বোঝায় এবং আপনি নির্ধারিত করেন b = aতবে উভয় ভেরিয়েবল একই বস্তুকে বোঝায়:

>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True

7

isমেমরি অবস্থান তুলনা করবে। এটি অবজেক্ট-স্তরের তুলনার জন্য ব্যবহৃত হয়।

==প্রোগ্রামের ভেরিয়েবলগুলির সাথে তুলনা করবে। এটি একটি মান স্তরে যাচাইয়ের জন্য ব্যবহৃত হয়।

is ঠিকানার স্তর সমতুল্যের জন্য পরীক্ষা করে

== মান স্তরের সমতা জন্য পরীক্ষা করে


3

isপরিচয় পরীক্ষা, ==সমতা পরীক্ষা ( পাইথন ডকুমেন্টেশন দেখুন )।

বেশিরভাগ ক্ষেত্রে, যদি হয় a is b, তবে a == b। তবে ব্যতিক্রমগুলি রয়েছে, উদাহরণস্বরূপ:

>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False

সুতরাং, আপনি কেবল isপরিচয় পরীক্ষার জন্য ব্যবহার করতে পারেন , কখনও সমতা পরীক্ষার জন্য নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.