Simple Sieve of Eratosthenes in Python 3
The second for-loop doesn’t look very nice with the break ...


You can remove that for-loop if you test p for being prime in the while-loop:

while p ** 2 &lt; max_n:
    if sieve[p]:
        # p is prime: cross-out all true multiples of p:
        for z in range(2 * p, max_n, p):
            sieve[z] = False
    p += 1



  Are there still any simplifications possible? Or non-hackish ways to increase performance?


Here are two simple changes which increase the performance:
First, since 2 is the only even prime, you can increment p by two after the first iteration:

    p = p + 2 if p &gt; 2 else 3


Second, it suffices to “cross-out” the multiples of p starting at p*p (instead of 2*p) because all lesser multiples have been handled before:

        for z in range(p * p, max_n, p):
            sieve[z] = False