<div dir="ltr"><div class="gmail_extra">I haven't seen anyone else mention it, so I will point out: interoperability with C. In C, strings are NUL-terminated. PyStringObject instances do (or used to) have NUL-terminated strings in them. According to unicodeobject.h, that seems still to be the case:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra"><font face="monospace, monospace">typedef struct {</font></div><div class="gmail_extra"><font face="monospace, monospace">    /* There are 4 forms of Unicode strings:</font></div><div><font face="monospace, monospace">    ...</font></div></div><div class="gmail_extra"><font face="monospace, monospace">    wchar_t *wstr;              /* wchar_t representation (<b>null-terminated</b>) */</font></div><div class="gmail_extra"><div class="gmail_extra"><font face="monospace, monospace">} PyASCIIObject;</font></div><div><br></div></div><div class="gmail_extra">and:</div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_extra"><font face="monospace, monospace">typedef struct {</font></div><div class="gmail_extra"><font face="monospace, monospace">    PyASCIIObject _base;</font></div><div class="gmail_extra"><font face="monospace, monospace">    Py_ssize_t utf8_length;     /* Number of bytes in utf8, <b>excluding the</b></font></div><div class="gmail_extra"><font face="monospace, monospace"><b>                                 * terminating \0</b>. */</font></div><div class="gmail_extra"><font face="monospace, monospace">    char *utf8;                 /* UTF-8 representation (<b>null-terminated</b>) */</font></div><div class="gmail_extra"><font face="monospace, monospace">    Py_ssize_t wstr_length;     /* Number of code points in wstr, possible</font></div><div class="gmail_extra"><font face="monospace, monospace">                                 * surrogates count as two code points. */</font></div><div class="gmail_extra"><font face="monospace, monospace">} PyCompactUnicodeObject;</font></div><div><br></div></div><div class="gmail_extra">The raw string is NUL-terminated, precisely so copying isn't required in most cases before passing to C. Making s[1:-1] a view onto the underlying string data in s would require you to copy the data when you want to pass the view into C so you could tack on that NUL. That happens a lot, so it's likely you wouldn't save much work, and result in a lot more churn in Python's memory allocator. The only place you could avoid the copy is if the view you are dealing with is a strict suffix of s.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Skip</div><div class="gmail_extra"><br></div></div>