Is An Element of a Sequence an Object?

Peter Otten __peter__ at web.de
Sun Jun 4 02:50:04 EDT 2017


Steven D'Aprano wrote:

> On Sun, 04 Jun 2017 02:15:33 +0000, Grant Edwards wrote:
> 
>> On 2017-06-03, Thomas Jollans <tjol at tjol.eu> wrote:
>>> On 03/06/17 21:10, Jon Forrest wrote:
>>>
>>>> I'm learning about Python. A book I'm reading about it says "... a
>>>> string in Python is a sequence. A sequence is an ordered collection of
>>>> objects". This implies that each character in a string is itself an
>>>> object.
>> 
>> You can think about it that way if you want, and from observable
>> behavior you can't tell whether or not it's true.
> 
> Actually you can, and you recognise that yourself:
> 
> [...]
>>> No, strings don't internally store the characters as objects,
>> 
>> Not in CPython, they don't.  In some other (hypothetical)
>> implementation, they could be.  The memory usage speed implications of
>> such a decision are not pleasant to contemplate.
> 
> Python strings would use a lot more memory if they were implemented in
> the way the mystery book suggests they are (each character being
> represented as a distinct object).
> 
> In Python 3, for example:
> 
> 
>>>> import sys
>>>> sys.getsizeof("abcde")  # actual memory consumption
> 54
>>>> sum(sys.getsizeof(c) for c in "acbde")  # theoretical
> 250
> 
> 
> So we can tell the two implementations apart.

I str were implemented as a sequence of character objects it would still 
report

>>> sys.getsizeof(tuple("abcde"))
88

The tuple doesn't store objects either, it holds pointers to objects and 
could easily be changed to hold the values of small integers, say.




More information about the Python-list mailing list