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)
2 - Why are foo() and bar() the same size, even with bar()'s 4 integers?
3 - Why's bar()'s size smaller than the sum of the sizes of 4 integers?



Thanks..

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

Reply via email to