Jest to bardziej "interesujące" zjawisko, które napotkałem w module Pythona, który próbuję zrozumieć, niż prośbę o pomoc (choć byłoby również przydatne rozwiązanie).Niezmienność ciągów w CPython naruszone
>>> import fuzzy
>>> s = fuzzy.Soundex(4)
>>> a = "apple"
>>> b = a
>>> sdx_a = s(a)
>>> sdx_a
'A140'
>>> a
'APPLE'
>>> b
'APPLE'
Tak więc moduł fuzzy całkowicie narusza niezmienność ciągi w Pythonie. Czy jest to możliwe, ponieważ jest to rozszerzenie C? Czy stanowi to błąd w CPython, a także w module, a nawet w ryzyku bezpieczeństwa?
Czy ktoś może wymyślić sposób na obejście tego zachowania? Chciałbym móc zachować oryginalną wielkość liter w łańcuchu.
Cheers,
Alex
Nie widzę nigdzie w wygenerowanym C, w którym mutuje ciąg znaków. –
@ IgnacioVazquez-Abrams: może czegoś brakuje, ale czy nie zmienia tego w '__call__' [' __pyx_f_5fuzzy_7Soundex ___ call__']? Deklaruje cdef char ptr, który ustawia jako równy wynikowi wywołania PyString_AsString, a następnie modyfikuje zawartość. – DSM
@DSM: Nie w kodzie w Bitbucket. Widzę tylko odczyty z niego, w [linii 891] (https://bitbucket.org/yougov/fuzzy/src/c210ad2f3f68/src/fuzzy.c#cl-891). –