代码之家  ›  专栏  ›  技术社区  ›  Cameron

python子字符串提取的效率如何?

  •  3
  • Cameron  · 技术社区  · 14 年前

    我有一个文本文件的全部内容(至少有几KB)的字符串 myStr .

    以下代码是否会在内存中创建字符串(减去第一个字符)的副本?

    myStr = myStr[1:]

    我希望它只是指同一个内部缓冲区中的不同位置。如果没有,是否有更有效的方法来做到这一点?

    谢谢!

    注意:我使用的是Python2.5。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Glenn Maynard    14 年前

    至少在2.6中,字符串片段总是新的分配;string_slice()调用pystring_fromStringandSize()。它不重用内存——这有点奇怪,因为使用不变的字符串,应该是一件相对容易的事情。

    除了缓冲区api(您可能不需要),没有更有效的方法来执行此操作。

        2
  •  3
  •   SingleNegationElimination    14 年前

    与大多数垃圾收集语言一样,字符串是根据需要创建的,这是非常常见的。原因是,如前所述跟踪子字符串会使垃圾收集更加困难。

    您要实现的实际算法是什么。如果我们多了解一点,也许可以给你一些建议,告诉你如何取得更好的结果。

    至于另一种选择,你真正需要做的是什么?你能用另一种方法来看待这个问题吗,比如在字符串中保留一个整数索引?你能用一个 array.array('u') ?

        3
  •  1
  •   Benson    14 年前

    一个(尽管有点老套)解决方案是这样的:

    f = open("test.c")
    f.read(1)
    myStr = f.read()
    print myStr
    

    它将跳过第一个字符,然后将数据读入字符串变量。

        4
  •  1
  •   Mike Graham    14 年前

    取决于你在做什么, itertools.islice 可以 是一个合适的内存高效的解决方案(如果有必要的话)。