I'm a newcomer to python and I have been exploring the properties of python functions. Suppose I create an simple function foo
def foo():
pass
Now if I check how much memory is allocated for foo
, by doing
import sys
sys.getsizeof(foo) # I get 144 bytes.
Moreover, foo.__dict__
is initially {}
and 248 bytes are allocated for foo.__dict__
However, if I add a arbitrary attribute to foo
, say foo.foo_attribute="some attribute"
then foo.__dict__
gets updated as follows: {foo_attribute:"some attribute"}
.
Now if I again check the memory allocation of sys.getsizeof(foo)
I still get 144 bytes, even though the function's dict attribute was updated. Moreover, foo.__dict__
still remains 248 bytes.
I was expecting the size of the function foo
to increase after adding an arbitrary attribute to foo
and also the size of foo.__dict__
, however neither of that occured and the memory size stayed the same.
Any reason why this behavior occurs?
Thanks in advance!