我在尝试理解一个Python模块时遇到了一个比较有趣的现象,这更多是一种“有趣”的现象,而不是寻求帮助(尽管解决方案也很有用)。
>>> 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和模块的错误,甚至安全风险?
此外,有没有人想到一种方法来解决这个问题?我希望能保留原始字符串的大小写。
谢谢,
Alex
__call__
[__pyx_f_5fuzzy_7Soundex___call__
]中改变了它吗?它声明了一个cdef char ptr,将其设置为PyString_AsString调用的结果,然后修改其内容。 - DSM