Memory management for a dictionary in python

I have the following code, I do not understand the script underlying this, please anyone can explain.

import sys
data={}
print sys.getsizeof(data)
######output is 280
data={ 1:2,2:1,3:2,4:5,5:5,6:6,7:7,8:8,9:9,0:0,11:11,12:12,13:13,14:14,15:15}
print sys.getsizeof(data)
######output is 1816
data={1:2,2:1,3:2,4:5,5:5,6:6,7:7,8:8,9:9,0:0,11:11,12:12,13:13,14:14,15:15,16:16}
print sys.getsizeof(data)
##### output is 1048

if we increase the len of the dictionary, then it should increase in size in memory, but it decreases why?

+4
source share
1 answer

getsizeof()calls the __sizeof__object method and adds additional garbage collector overhead if the object is managed by the garbage collector.

Windows x64 - If you did this as shown below:

data={ 1:2,2:1,3:2,4:5,5:5,6:6,7:7,8:8,9:9,0:0,11:11,12:12,13:13,14:14,15:15}
print sys.getsizeof(data)
print data
data[16]=16
print sys.getsizeof(data)
print data

printed:

1808
{0: 0, 1: 2, 2: 1, 3: 2, 4: 5, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15}
1808
{0: 0, 1: 2, 2: 1, 3: 2, 4: 5, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 11: 11, 12: 12, 13: 13, 14: 14, 15: 15, 16: 16}

But I really noticed the same behavior when rewriting a data dictionary, as you mentioned:

272  #empty data dict
1808 # 15 elements in data dict
1040 # 16 elements in data dict
0
source

All Articles