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.

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to