在 CPython 中,这是可行的:
import ctypes
ctypes.pythonapi.PyString_AsString.argtypes = (ctypes.c_void_p,)
ctypes.pythonapi.PyString_AsString.restype = ctypes.POINTER(ctypes.c_char)
s = "abc"
cs = ctypes.pythonapi.PyString_AsString(id(s))
cs[0] = "x"
print s # will print 'xbc'
在 PyPy 中,它不会,因为我无法通过这种方式访问 C-API。
有什么方法可以在 PyPy 中做同样的事情吗?
最佳答案
你不应该那样做。主要原因是 PyPy 有一个可移动的垃圾收集器,因此指向其内容的指针可能会突然开始指向垃圾。另一个原因是我们有几个选项具有 StringAdd(a, b) 结构,其中实际上没有底层 char* 可引用。这些优化默认情况下未启用,但可能很快就会启用。
关于python - PyPy:获取对字符串的原始访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310445/