违反了CPython中的字符串不变性

Ale*_*lex 15 python string fuzzy

这更像是我在Python模块中遇到的"有趣"现象,我试图理解,而不是请求帮助(尽管解决方案也很有用).

>>> import fuzzy
>>> s = fuzzy.Soundex(4)
>>> a = "apple"
>>> b = a
>>> sdx_a = s(a)
>>> sdx_a
'A140'
>>> a
'APPLE'
>>> b
'APPLE'
Run Code Online (Sandbox Code Playgroud)

是的,所以模糊模块完全违反了Python中字符串的不变性.能够这样做是因为它是C扩展吗?这是否构成CPython以及模块中的错误,甚至是安全风险?

此外,任何人都可以想办法解决这种行为吗?我希望能够保持字符串的原始大小写.

干杯,

亚历克斯

Ign*_*ams 13

这个bug 在2月份得到了解决; 更新你的版本.

要回答您的问题,是的,有几种方法可以在C级别修改不可变类型.在这一点上,安全隐患是未知的,甚至可能是不可知的.