मैं पूरी तरह से इसस्ट्रिंग चरित्र पहचान विरोधाभास
>>> s = chr(8263)
>>> x = s[0]
>>> x is s[0]
False
के साथ फंस कर रहा हूँ यह कैसे संभव है? क्या इसका मतलब यह है कि इंडेक्सिंग द्वारा एक स्ट्रिंग कैरेक्टर तक पहुंच एक ही चरित्र का एक नया उदाहरण बनाते हैं? चलो प्रयोग:
>>> L = [s[0] for _ in range(1000)]
>>> len(set(L))
1
>>> ids = map(id, L)
>>> len(set(ids))
1000
>>>
ओह क्या बाइट्स की बर्बादी;) या यह मतलब है कि str.__getitem__
एक छिपा सुविधा है करता है? क्या कोई समझा सकता है?
>>> s = chr(8263)
>>> t = s
>>> print(t is s, id(t) == id(s))
True True
यह स्पष्ट है::
लेकिन यह मेरे आश्चर्य का अंत नहीं है t
s
के लिए एक उपनाम है, तो वे एक ही वस्तु का प्रतिनिधित्व करते हैं और पहचान मेल खाना। लेकिन फिर, कैसे निम्नलिखित संभव है:
>>> print(t[0] is s[0])
False
s
और t
तो क्या एक ही वस्तु है?
लेकिन बदतर:
>>> print(id(t[0]) == id(s[0]))
True
t[0]
और s[0]
कचरा एकत्र नहीं किया गया है, is
ऑपरेटर द्वारा एक ही वस्तु के रूप में माना लेकिन अलग आईडी है कर रहे हैं? क्या कोई समझा सकता है?
आपका चार वास्तव में एक एकल तत्व स्ट्रिंग है, इसलिए हाँ, सूचकांक द्वारा चार तक पहुँचने लंबाई 1. –
मैं इस-'ValueError पाने के नए स्ट्रिंग बनाता है: chr() श्रेणी में नहीं ARG (256)' जब मैं इसे चलाता हूं- 's = chr (8263)' – CrakC
डुप्लिकेट कैसे बताता है 'टी [0] एस है [0] -> गलत' अगर आईडी (टी [0]) == आईडी (एस [0]) -> सही'? –