我有一个长约 1GB 的巨大 str:
>>> len(L)
1073741824
我需要从特定索引中取出许多字符串,直到字符串结束。在 C 中我会这样做:
char* L = ...;
char* p1 = L + start1;
char* p2 = L + start2;
...
但在 Python 中,对字符串进行切片会使用更多内存创建一个新的 str 实例:
>>> id(L)
140613333131280
>>> p1 = L[10:]
>>> id(p1)
140612259385360
为了节省内存,我如何创建一个实际上是指向原始 L 的指针的类似 str 的对象?
Edit:我们在 Python 2 和 Python 3 中有 buffer 和 memoryview,但 memoryview 没有展示与 str 或 bytes 相同的接口(interface):
>>> L = b"0" * 1000
>>> a = memoryview(L)
>>> b = memoryview(L)
>>> a < b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: memoryview() < memoryview()
>>> type(b'')
<class 'bytes'>
>>> b'' < b''
False
>>> b'0' < b'1'
True
最佳答案
有一个memoryview类型:
>>> v = memoryview('potato')
>>> v[2]
't'
>>> v[-1]
'o'
>>> v[1:4]
<memory at 0x7ff0876fb808>
>>> v[1:4].tobytes()
'ota'
关于Python str View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27013372/