/ / जब पाइथन स्ट्रिंग को प्रशिक्षित करना चुनता है [डुप्लिकेट] - पायथन, स्ट्रिंग-इंटर्निंग

पाइथन एक स्ट्रिंग [डुप्लिकेट] - पायथन, स्ट्रिंग-इंटर्निंग को इंटर्न करने का विकल्प कब चुनता है

>>> s1 = "spam"
>>> s2 = "spam"
>>> s1 is s2
True
>>> q = "asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf"
>>> r = "asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf"
>>> q is r
False

कितने पात्र होना चाहिए s1 is s2 देना False? सीमा कहाँ है? यानी, मैं पूछ रहा हूं कि पाइथन इससे अलग प्रतियां बनाने से पहले एक स्ट्रिंग कितनी देर होनी चाहिए।

उत्तर:

उत्तर № 1 के लिए 13

स्ट्रिंग इंटर्निंग कार्यान्वयन विशिष्ट है और यदि आप दो तारों को देखना चाहते हैं तो समानता परीक्षण का उपयोग नहीं किया जाना चाहिए।


जवाब के लिए 11 № 2

यदि आप चाहते हैं, कुछ विचित्र कारणों से, तुलना को सत्य होने के लिए मजबूर करने के लिए इंटर्न फ़ंक्शन का उपयोग करें:

>>> ए = इंटर्न ("12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp") >>> बी = इंटर्न ("12345678012345678901234567890qazwsxedcrfvtgbyhnujmikolp") >>> एक बी है सच

जवाब के लिए 4 № 3

CPython 2.5.0 स्रोत फ़ाइल (stringobject.h) से आंतरिक स्ट्रिंग के बारे में टिप्पणी का एक टुकड़ा यहां दिया गया है

/* ... ... This is generally restricted to strings that **"look like" Python identifiers**, although the intern() builtin can be used to force interning of any string ... ... */

तदनुसार, तारों में केवल अंडरस्कोर होते हैं, अंक या वर्णमाला को प्रशिक्षित किया जाएगा। आपके उदाहरण में, q और `` आर शामिल है ;, इसलिए उन्हें प्रशिक्षित नहीं किया जाएगा।