Python子串提取的效率如何?
我有一个文本文件的全部内容(至少几千字节)存储在字符串 myStr
中。
下面这段代码会在内存中创建一个字符串的副本吗?这个副本会去掉第一个字符。
myStr = myStr[1:]
我希望它只是指向同一个内部存储区域的不同位置。如果不是,有没有更有效的方法来做到这一点?
谢谢!
注意:我使用的是 Python 2.5。
4 个回答
1
根据你正在做的事情,itertools.islice
可能是一个合适的、节省内存的解决方案(如果需要的话)。
3
像大多数有垃圾回收机制的编程语言一样,字符串会根据需要频繁创建。这是因为如果要追踪子字符串,就会让垃圾回收变得更加复杂。
你想实现的具体算法是什么?如果我们能多了解一些,或许能给你一些更好的建议。
至于替代方案,你到底需要做什么呢?有没有可能换个角度来看这个问题,比如只保留一个整数索引来指向字符串?你能不能使用一个 array.array('u')
?
4
在2.6版本中,字符串的切片操作总是会分配新的内存。也就是说,当你用string_slice()这个函数时,它会调用PyString_FromStringAndSize()来创建一个新的字符串。这个过程不会重复使用之前的内存,这有点奇怪,因为对于不变的字符串来说,应该比较容易做到这一点。
除了缓冲区API(你可能不想用这个),没有更有效的方法来完成这个操作。