Questo è più di un fenomeno "interessante" che ho incontrato in un modulo Python che sto cercando di capire, piuttosto che una richiesta di aiuto (anche se una soluzione sarebbe anche utile).Immutabilità di stringa in CPython violata
>>> import fuzzy
>>> s = fuzzy.Soundex(4)
>>> a = "apple"
>>> b = a
>>> sdx_a = s(a)
>>> sdx_a
'A140'
>>> a
'APPLE'
>>> b
'APPLE'
Sì, così il modulo fuzzy viola totalmente l'immutabilità delle stringhe in Python. È in grado di farlo perché è un'estensione C? E questo costituisce un errore in CPython così come il modulo, o anche un rischio per la sicurezza?
Inoltre, qualcuno può pensare a un modo per aggirare questo comportamento? Mi piacerebbe essere in grado di mantenere l'iniziale maiuscola della stringa.
Cheers,
Alex
Non vedo da nessuna parte nel C generato dove si muta la stringa. –
@ IgnacioVazquez-Abrams: forse mi manca qualcosa, ma non lo muta in '__call__' [' __pyx_f_5fuzzy_7Soundex ___ call__']? Dichiara un cdef char ptr che viene impostato uguale al risultato di una chiamata PyString_AsString e quindi modifica il contenuto. – DSM
@DSM: non nel codice in Bitbucket. Vedo solo letture da esso, su [riga 891] (https://bitbucket.org/yougov/fuzzy/src/c210ad2f3f68/src/fuzzy.c#cl-891). –