You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否无复制从原生指针或张量缓冲区创建Python字符串?

核心需求与技术疑问

需求背景

  • 将大量字符串存储在PyTorch/NumPy张量中(例如采用固定大小的UTF-32 4字节字符格式,甚至可通过mmap映射自磁盘),并使用Python3字符串API对其进行操作。
  • 为实现极致优雅性、节省Python对象开销、手动管理内存池(也出于纯粹好奇心),希望零拷贝从底层缓冲区创建原生Python字符串,不触发缓冲区复制。

核心疑问

  • 查阅PyUnicode_FromKindAndData文档得知其「必要时会复制输入缓冲区并转换为标准表示」,想确认:若底层字节格式无需转换,该函数是否仍会复制缓冲区?
  • 是否存在其他实现零拷贝创建Python字符串的方法?(已了解PyUnicode_4BYTE_DATA接口)
  • 最直白的问题:能否将ASCII字节指针转换为对应缓冲区的Python字符串视图,且不进行任何缓冲区复制(由开发者自行负责缓冲区的内存管理)?

补充更新

  • UPD1:经讨论后确认,PyUnicode_FromKindAndData似乎会调用PyUnicode_New,再通过memcpy将数据拷贝至PyUnicode对象中。因此问题可改写为:能否创建带有正确编码信息的空字符串对象,再通过ctypes直接设置其data和size字段?
  • UPD2:已在CPython仓库创建议题,用于与Python开发者讨论该问题。

内容的提问来源于stack exchange,提问作者Vadim Kantorov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:55:06