python 3中字符串切片操作的时间复杂度

kum*_*mo2 1 python string python-3.x

给定一个字符串s长度为n,切片操作s[i : j]Python 3中,其中
(0 <=i <= j <= n),需要多少时间在大O符号?

是 O(n) 或 O(1) 还是其他什么?

编辑

在python 3中切片列表和字符串是否有任何实现差异?

Tim*_*ers 5

CPython 通过创建一个包含提取字符的新字符串对象来实现字符串切片。这花费的时间与复制的字符数成正比,因此花费的时间与j-i(复制的字符数)成正比。

  • @Manya: https://github.com/python/cpython/blob/d81bea6520892e0428aec61c73e0631a69db11bb/Objects/unicodeobject.c#L14027, https://github.com/python/cpython/blob/d81bea65202873ae65202873ae65202873ae65202873ae65202873ae65202873ae652081a69db11bb/Objects/unicodeobject.c#L14023 , https://github.com/python/cpython/blob/d81bea6520892e0428aec61c73e0631a69db11bb/Objects/unicodeobject.c#L2207 (2认同)
  • 字符串和列表之间有一些细微的区别,例如`str[:]` 将返回原始的`str`,而任何可变类型(例如列表)将返回一个完整的副本。 (2认同)