len() on mutables vs. immutables

Terry Reedy tjreedy at udel.edu
Thu Oct 18 14:29:28 EDT 2012


On 10/18/2012 1:23 PM, Demian Brecht wrote:

> When len() is called passing an immutable built-in type (such as a
> string), I'd assume that the overhead in doing so is simply a function
> call and there are no on-call calculations done. Is that correct?

See below.

> I'd also assume that mutable built-in types (such as a bytearray) would
> cache their size internally as a side effect of mutation operations. Is

Or the length could be the difference of two pointers -- address of the 
first empty slot minus address of first item.

> that correct? If so, is it safe to assume that at least all built-in
> types observe this behavior,

str, bytes, bytearrays, arrays, sets, frozensets, dicts, dictviews, and 
ranges should all return len in O(1) time. That includes the possibility 
of a subtraction as indicated above.

-- 
Terry Jan Reedy




More information about the Python-list mailing list