[Tutor] Why is an instance smaller than the sum of its components?
Emile van Sebille
emile at fenx.com
Tue Feb 3 22:59:27 CET 2015
On 2/3/2015 1:12 PM, Jugurtha Hadjar wrote:
> Hello,
>
> I was writing something and thought: Since the class had some
> 'constants', and multiple instances would be created, I assume that each
> instance would have its own data. So this would mean duplication of the
> same constants? If so, I thought why not put the constants in memory
> once, for every instance to access (to reduce memory usage).
>
> Correct me if I'm wrong in my assumptions (i.e: If instances share stuff).
>
> So I investigated further..
>
> >>> import sys
> >>> sys.getsizeof(5)
> 12
>
>
> So an integer on my machine is 12 bytes.
>
> Now:
>
> >>> class foo(object):
> ... def __init__(self):
> ... pass
>
> >>> sys.getsizeof(foo)
> 448
>
> >>> sys.getsizeof(foo())
> 28
>
> >>> foo
> <class '__main__.foo'>
> >>> foo()
> <__main__.foo object at 0xXXXXXXX
>
>
> - Second weird thing:
>
> >>> class bar(object):
> ... def __init__(self):
> ... self.w = 5
> ... self.x = 6
> ... self.y = 7
> ... self.z = 8
>
> >>> sys.getsizeof(bar)
> 448
> >>> sys.getsizeof(foo)
> 448
> >>> sys.getsizeof(bar())
> 28
> >>> sys.getsizeof(foo())
> 28
>
> >>> sys.getsizeof(bar().x)
> 12
> >>> sys.getsizeof(bar().y)
> 12
>
>
> Summary questions:
>
> 1 - Why are foo's and bar's class sizes the same? (foo's just a nop)
i'm not sure on this one.
> 2 - Why are foo() and bar() the same size, even with bar()'s 4 integers?
neither foo() nor bar() return anything explicitly, so both return the
default none
> 3 - Why's bar()'s size smaller than the sum of the sizes of 4 integers?
same as above.
More information about the Tutor
mailing list