Exercise 1 solution import sys def growth_points(n): a = [] out = [] last = sys.getsizeof(a) for i in range(n): a.append(i) size = sys.getsizeof(a) if size != last: out.append(len(a)) last = size return out print(growth_points(100)) One run printed: [1, 5, 9, 17, 25, 33, 41, 53, 65, 77, 93] (Exact points can differ between Python versions.) The gaps are small at first (4, 4, 8, 8, 8, 8, 12, 12, 12, 16) and slowly widen, because each new block is larger in proportion to the current size. Growth steps therefore become rarer as the list grows, which is why append is cheap on average.