How expensive are list and tuple slicing?

Alex delete.this.part.alex.news at attbi.com
Mon May 12 23:40:20 EDT 2003


Tim Peters wrote:

> [Alex]
>> Does slicing a list allocate memory at the point of the slice, or does
>> python implement some sort of copy on write scheme to save memory?  How
>> about tuples (which are immutable)?
> 
> Same answer for both:  x[i:j] takes time and space proportional to j-i; a
> new and independent object is created.
> 
>> Example: The following snippet of code counts the number of items in a
>> sequence.  It is obviously a very stupid way of doing this.  Neither the
>> sequence, nor any of its slices, are ever modified.
> 
> Doesn't matter.
> 
>> How much memory does it consume if the sequence is a list?
> 
> Proportional to len(sequence)**2.
> 
>> A tuple?
> 
> The same, but with a smaller proportionality constant because an N-element
> tuple requires a little less space than an N-element list in CPython.
> 
>> Is the behavior the same on Python and Jython?
> 
> Pretty much, yes.
> 
>> def count(sequence):
>>   if len(sequence)==1:
>>     return 1
>>   return count(sequence[:1])+ count(sequence[1:])
> 
> The "count(sequence[:1])" part doesn't contribute to the quadratic growth.

Thanks.  I guess that means I had better take care when writing recursive
functions that operate on large lists.







More information about the Python-list mailing list