100 days of code: Day 8 - memory and time

Last modified on 2020-06-16

Source: 100-days-of-code.

Working from yesterday’s program I created a more simple program - sum_integers.py- that uses a for loop to generate a list of all numbers between START and STOP and the sum total of all the numbers in the range …

# Sum total of all integers between START and STOP.
import time

# Start and stop numbers for range().
start, stop = 0, 0

print("Add together all integers between START and STOP.")
start = int(input("START number? > "))
stop = int(input("STOP number? > "))

start_time = time.time()    # let's time how long each method takes to run
numbers = list(range(start, int(stop +1)))  # range() stops at number minus 1
total_count = sum(numbers)
total_time = time.time() - start_time       # total elapsed time

print(f"\nSum total of all numbers between {start} and " + f"{stop} "
        + f"is {total_count:_}"    # display large numbers with `_` separator
        + ".")
print(f"Calculated in {total_time:.2f} "   # display time to 2 decimal places
        + "seconds.")

My laptop running this code has 8GB of RAM and solid state storage. Setting a large STOP value in the hundreds of millions consumes gigabytes of memory. When the program reaches the limits of installed RAM and starts using swap memory, a comparatively small increase in STOP value leads to a dramatic increase in code execution time.

Generating a list and sum from a STOP value of 186.5 million takes less than 6 seconds …

$ python3 sum_integers.py
Add together all integers between START and STOP.
START number? > 1
STOP number? > 186500000

Sum total of all numbers between 1 and 186500000 is 17_391_125_093_250_000.
Calculated in 5.49 seconds.

An increase of 100 thousand (0.0005%) shows over a 1000% increase in execution time!

$ python3 sum_integers.py
Add together all integers between START and STOP.
START number? > 1
STOP number? > 186600000

Sum total of all numbers between 1 and 186600000 is 17_409_780_093_300_000.
Calculated in 58.28 seconds.

Wow.

Happy hacking!