I found this excellent resource discussing memory usage of python dictionaries and sets, specifically:
By default, the smallest size of a dictionary or set is 8 (that is, if you are only storying 3 values, python will still allocate 8 elements). On resize, the number of buckets increases by 4x until we reach 50,000 elements, after which the size is increased by 2x. This gives the following possible sizes,
16, 64, 256, 1024, 4096, 16384, 65536, 131072, 262144, ...
It is important to note that resizing can happen to make a hash table larger OR smaller. That is, if sufficiently many elements of a hash table are deleted, the table can be scaled down in size. This is because the consideration for the table being 2/3rds full uses the total of inserted and deleted entries since the last resize. However, resizing only happens during an insert.
But this was published in September 2014 and thus likely written some time before that. Is this still accurate and relevant in the latest versions of Python? (3.6+)