如果在Python 字符串.split()上使用字符串,则返回字符串列表.这些已拆分的子字符串是其父字符串部分的副本.
是否有可能获得一些更便宜的切片对象,只保留参考,偏移和长度分割出的位?
是否有可能有一些"字符串视图"来提取和处理这些子字符串,就像它们是字符串而没有复制它们的字节一样?
(我问,因为我有很大的字符串,我想要切片,偶尔会耗尽内存;删除副本将是一个廉价的配置文件引导的胜利.)
Ign*_*ams 21
buffer 将为您提供字符串的只读视图.
>>> s = 'abcdefghijklmnopqrstuvwxyz'
>>> b = buffer(s, 2, 10)
>>> b
<read-only buffer for 0x7f935ee75d70, size 10, offset 2 at 0x7f935ee5a8f0>
>>> b[:]
'cdefghijkl'
Run Code Online (Sandbox Code Playgroud)
字符串对象始终指向Python中NUL终止的缓冲区,因此必须复制子字符串。正如Ignacio所指出的,您可以buffer()用来获取字符串存储器的只读视图。不过,buffer()内置功能已被功能更广泛的memoryview对象所取代,这些对象在Python 2.7和3.x中可用(buffer()在Python 3.x中已不存在)。
s = "abcd" * 50
view = memoryview(s)
subview = view[10:20]
print subview.tobytes()
Run Code Online (Sandbox Code Playgroud)
此代码打印
cdabcdabcd
Run Code Online (Sandbox Code Playgroud)
调用时tobytes(),将立即创建字符串的副本,但是将旧buffer对象切成薄片时,也会发生与Ignacio的答案相同的情况。
| 归档时间: |
|
| 查看次数: |
2793 次 |
| 最近记录: |