python - PyPy:获取对字符串的原始访问

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

最佳答案

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

关于python - PyPy:获取对字符串的原始访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310445/

相关文章:

python - 了解matplotlib : plt,图,ax(arr)?

python - 在单个 GPU 上并行拟合多个 Keras 模型

python - 如何从 Python 执行复杂的 shell 查找命令?

python - Python2.7 找不到 psycopg2 模块

python - 为什么@property 比属性慢,而字节码是相同的

multithreading - 有多线程跟踪JIT编译器的示例吗?

django - 配置不当 : Error loading psycopg2 module: No module named cffi

cpython - 完成后如何以编程方式告诉 CPython 解释器进入交互模式?

python - CPython 中 os.stat() 在哪里定义?

debian - 无法在 Debian 上为 Pypy 安装 Pip