gpt4 book ai didi

python - 指向 Python 子字符串 : memoryview vs itertools. 的指针 islice vs …?

转载 作者:行者123 更新时间:2023-12-01 09:24:20 32 4
gpt4 key购买 nike

我最好使用 memoryviewitertools.islice 或其他东西(例如 var = (start, stop))作为Python 中指向非常大字符串的子字符串的指针?

上下文:我有一些非常长的字符串需要操作(剪切和粘贴子字符串等),而无需每次都创建新字符串。

我通过创建一个二叉搜索树来实现这一点,其中每个节点代表一个子字符串,然后使用拆分/合并操作(Rope 数据结构)。

每个节点都需要一个引用,该引用附加到该节点表示的原始非常大字符串的子字符串。 (这是必要的,以便当我按顺序遍历树以生成最终编辑的字符串时,我可以按修改后的顺序取回原始字符串的部分。)

我可以将表示开始/停止值的元组附加到每个节点,然后使用切片string[start:stop],但在 C 中,您将使用指针和字符计数。

在Python中使用memoryviewislice或其他东西做类似的事情会更好吗?

最佳答案

我对绳索数据结构或您的具体要求不太熟悉,不知道不复制数据的要求有多难。对于许多用例来说,在内存中拥有额外的副本不是问题,但某些优化或大文件可能需要其他解决方案。

在您列出的选项中,memoryview 是唯一一个不会在内存中创建额外副本的选项。请参阅this问题以获取更多信息,以及包含内存 View 有用示例的答案。虽然它可以加快某些操作的速度(如示例所示),但可能有更好的方法来解决问题或构建代码,从而消除一开始的需要。当然,您的用例和里程可能会有所不同。

我还发现了一些关于 memory mapped (mmap) 的链接文件,以及memoryview (py2 中的缓冲区)接口(interface)。如果您最终确实需要零复制指针,我绝对建议您查看内存 View 接口(interface)。

关于python - 指向 Python 子字符串 : memoryview vs itertools. 的指针 islice vs …?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557621/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com