On Sun, 4 Jun 2017 04:50 pm, Peter Otten wrote: > Steven D'Aprano wrote:
>> 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. Perhaps; but calling getsizeof directly is not enough to report the full memory usage of a collection. You need something like Raymond Hettinger's recursive getsizeof: code.activestate.com/recipes/577504/ Using that in Python 3.5 I get 174 bytes, and in 3.2 I get 204 bytes. The specific values will differ according to the platform, the version, and the implementation, but the conclusion should still holds. -- Steve “Cheer up,” they said, “things could be worse.” So I cheered up, and sure enough, things got worse. -- https://mail.python.org/mailman/listinfo/python-list