का उल्लंघन किया है यह एक पाइथन मॉड्यूल में एक 'रोचक' घटना है जिसे मैं समझने के लिए अनुरोध के बजाय समझने की कोशिश कर रहा हूं (हालांकि एक समाधान भी उपयोगी होगा)।सीपीथॉन में स्ट्रिंग अपरिवर्तनीयता ने
>>> import fuzzy
>>> s = fuzzy.Soundex(4)
>>> a = "apple"
>>> b = a
>>> sdx_a = s(a)
>>> sdx_a
'A140'
>>> a
'APPLE'
>>> b
'APPLE'
हाँ, तो fuzzy मॉड्यूल पूरी तरह से अजगर में तार की अचल स्थिति का उल्लंघन करती है। क्या यह ऐसा करने में सक्षम है क्योंकि यह सी-एक्सटेंशन है? और क्या यह सीपीथॉन के साथ-साथ मॉड्यूल, या यहां तक कि एक सुरक्षा जोखिम में एक त्रुटि है?
इसके अलावा, क्या कोई इस व्यवहार को पाने के तरीके के बारे में सोच सकता है? मैं स्ट्रिंग के मूल पूंजीकरण को रखने में सक्षम होना चाहता हूं।
चीयर्स,
एलेक्स
मैं उत्पन्न सी में कहीं भी नहीं देखता जहां यह स्ट्रिंग को बदलता है। –
@ IgnacioVazquez-Abrams: शायद मुझे कुछ याद आ रहा है, लेकिन क्या यह इसे '__call__' ['__pyx_f_5fuzzy_7Soundex ___ call__'] में परिवर्तित नहीं करता है? यह एक cdef char ptr घोषित करता है जो इसे PyString_AsString कॉल के परिणाम के बराबर सेट करता है, और उसके बाद सामग्री को संशोधित करता है। – DSM
@DSM: बिटबकेट में कोड में नहीं। मैं केवल [लाइन 891] (https://bitbucket.org/yougov/fuzzy/src/c210ad2f3f68/src/fuzzy.c#cl-891) पर इसे पढ़ता हूं। –