[Python-Dev] Slice as a copy... by design?

Hrvoje Nikšić hrvoje.niksic at avl.com
Mon May 26 11:21:35 CEST 2008


On Thu, 2008-05-22 at 13:27 -0300, Facundo Batista wrote:
> 2008/5/22 Scott Dial <scott+python-dev at scottdial.com>:
> 
> > If we changed Python to slice-by-reference, then tomorrow someone would be
> > asking why it isn't slice-by-copy. There are pros and cons to both that are
> 
> Which are the cons of slice-by-reference of an immutable string?

You have to consider the ramifications of such a design choice.  There
are two cases to consider: either slices return strings, or they return
a different types.

If they return strings, then all strings must grow three additional
fields: start, end, and the reference to the actual string.  That is 16
more bytes for *every* string, hardly a net win.

You could argue that string slicing should return a separate type.  But
then, every piece of code that handles strings must be taught to handle
this type in addition.  PyString_Check and PyString_CheckExact must go.
Instead of writing PyString_Foo, the C code would have to use
PyObject_CallMethod and friends for the simplest tasks.  Time-saving
macros like PyString_AS_STRING and PyString_GET_SIZE become obsolete.
Where performance matters (as it often does in low-level C code dealing
with strings), this is a real problem.  Besides, you lose various
special optimizations, such as dicts being much faster when all keys are
strings.




More information about the Python-Dev mailing list