PyPy:获取字符串的原始访问权限

时间:2012-09-07 01:04:49

标签: python cpython pypy

在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中做同样的事情?

1 个答案:

答案 0 :(得分:2)

你不应该这样做。主要原因是PyPy有一个可移动的垃圾收集器,因此指向它内容的指针可能突然开始指向垃圾。另一个原因是我们有几个选项具有StringAdd(a,b)结构,其中实际上没有底层char *可供引用。默认情况下,这些优化不会启用,但它们很快就会启用。