Weird `set` slowdown

Usually I don’t have trouble getting pretty consistent results. Repetition helps, alternating between the solutions helps, fixing the CPU frequency helps, keeping the machine pretty idle helps. Sometimes I benchmarked on a Google compute engine instance with two vCPUs (not shared, almost nothing running on it, and I think their frequency is fixed), which provided very stable results. And I’m mostly interested in relative speeds, so even if a few minutes later all solutions are 10% slower, that doesn’t matter.

This case is really a huge exception. Especially that one solution affects the time of another not just at all but so very much.

Thank you for your reply.

Yes. I wanted to focus on the gap between 512kB and 1MB.
I also tested for some cases like:

def test(x):
    b = bytearray(int(2**x))
    bytes(b)  # consumes (2^x) bytes.
    bytes(b)  # no consumption ? Id's are frequently the same for x < 20.

In this case, the second bytes(b) is often the same as the first one and does not consume another (2^x) bytes, so the gap is shifted by about -1 instead of -1.6 (~log2(3)) as follows.

Test for checking if the first and second `bytes(b)` IDs are the same: (click to expand)
def test(x):
    b = bytearray(int(2**x))
    i = id(bytes(b))
    j = id(bytes(b))
    print('o' if i==j else ' ', end='')
print('|         '*14, end='')

gives

10        11        12        13        14        15        16        17        18        19        20        21        22        23
|         |         |         |         |         |         |         |         |         |         |         |         |         |         Trial 0...
o    o o ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo  o   o         o                o      Trial 1...
  o  o o  oooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                  o           o         Trial 2...
  o oo o  oooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                 o       o              Trial 3...
  o    o  oooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo o      o                               Trial 4...
    o oo  oooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                      o              o  Trial 5...
  o o oo  oooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                           o      o  o  Trial 6...
       o ooooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo             o     o  o         o       Trial 7...
 o  o oo ooooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo         o                           o  Trial 8...
      oo  oooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                                  o  o  Trial 9...
    o oo ooooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                  o                     Trial 10...
      oo  oooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                                   o   oTrial 11...
    oooo  oooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo        o                               Trial 12...
       o  oooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo          o       o      o              Trial 13...
 o   o o  oooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo   o              o                     Trial 14...
    oo o  oooooooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                              o       o Trial 15...
    ooooo oooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo  o o                                 o Trial 16...
 o  oo o  oooooooooooo ooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                                        Trial 17...
      oo  oooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                           oo           Trial 18...
    o oooooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                                    o o Trial 19...

I am on Windows. :wink:

I only see that there is a complicated mechanism at the 1MB boundary, but give up going deeper.