vz0*_*vz0 10 python memory python-2.x python-3.x
我有一个str大约1GB的长度:
>>> len(L)
1073741824
Run Code Online (Sandbox Code Playgroud)
我需要从特定索引中取出许多字符串,直到字符串结束.在C我会这样做:
char* L = ...;
char* p1 = L + start1;
char* p2 = L + start2;
...
Run Code Online (Sandbox Code Playgroud)
但在Python中,切片字符串会str使用更多内存创建一个新实例:
>>> id(L)
140613333131280
>>> p1 = L[10:]
>>> id(p1)
140612259385360
Run Code Online (Sandbox Code Playgroud)
为了节省内存,我如何创建一个类似str的对象,实际上是指向原始L的指针?
编辑:我们有buffer和memoryview在Python 2和Python 3中,但memoryview没有展示与stror或相同的界面bytes:
>>> 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
Run Code Online (Sandbox Code Playgroud)
有一种memoryview类型:
>>> v = memoryview('potato')
>>> v[2]
't'
>>> v[-1]
'o'
>>> v[1:4]
<memory at 0x7ff0876fb808>
>>> v[1:4].tobytes()
'ota'
Run Code Online (Sandbox Code Playgroud)