Это более интересные явления, которые я встречал в модуле Python, который я пытаюсь понять, а не запрос на помощь (хотя решение также было бы полезно).Неисправность строк в CPython нарушена
>>> import fuzzy
>>> s = fuzzy.Soundex(4)
>>> a = "apple"
>>> b = a
>>> sdx_a = s(a)
>>> sdx_a
'A140'
>>> a
'APPLE'
>>> b
'APPLE'
Да, так что fuzzy модуль полностью нарушает неизменность строк в Python. Может ли это сделать, потому что это C-расширение? И это является ошибкой в CPython, а также модулем или даже угрозой безопасности?
Кроме того, может ли кто-нибудь подумать о способе обойти это поведение? Я хотел бы иметь возможность сохранить оригинальную капитализацию строки.
Cheers,
Alex
Я не вижу нигде в сгенерированном C, где он мутирует строку. –
@ IgnacioVazquez-Abrams: может быть, я что-то упустил, но разве он не мутировал его в '__call__' [' __pyx_f_5fuzzy_7Soundex ___ call__']? Он объявляет cdef char ptr, который он устанавливает равным результату вызова PyString_AsString, а затем изменяет содержимое. – DSM
@DSM: Не в коде в Bitbucket. Я вижу только чтение от него по [строка 891] (https://bitbucket.org/yougov/fuzzy/src/c210ad2f3f68/src/fuzzy.c#cl-891). –