obj[start:stop:step]slice(stop)slice(start, stop[, step])obj | The object that you want to extract a “sub-object” fromstart | The index of obj that you want the sub-object to start from (keep in mind that Python is zero-indexed, meaning that the first item of obj has an index of 0). If omitted, defaults to 0stop | The (non-inclusive) index of obj that you want the sub-object to end at. If omitted, defaults to len(obj). step | Allows you to select only every step item. If omitted, defaults to 1You can unify the concept of slicing strings with that of slicing other sequences by viewing strings as an immutable collection of characters, with the caveat that a unicode character is represented by a string of length 1.
In mathematical notation you can consider slicing to use a half-open interval of [start, end), that is to say that the start is included but the end is not. The half-open nature of the interval has the advantage that len(x[:n]) = n where len(x) > =n, while the interval being closed at the start has the advantage that x[n:n+1] = [x[n]] where x is a list with len(x) >= n, thus keeping consistency between indexing and slicing notation.