В чем отличие строки (n1,n2=n2,n1+n2) и строк (n1 = n2 and n2 = n1+n2)?
Во втором случае нужна третья  переменная  : b=n2>
 n2 =n1+n2  > n1=b 
Иначе пропадает значение в переменной  n1 или же переписывается на значение переменной n2 .

Тогда n2=n1+n2  становится равным n2=n2+n2 . По этому такие приколы 16 32. 

В первом случае замена переменных считай что происходит одновременно  . Это как дать команду поменять содержимое ведра с дёгтем и ведра с мёдом , но так чтобы не смешались .

 Когда использовал ( n1=n2 , n2=n1+n2 ):"замена вёдер  со смешиванием дёгтя и мёда  "
 происходит переписывание n1 на n2 и потерей числа 'сидящего' в  переменной  n1 , 
т.к ты приказал поместить туда число 'сидящее' в n2 , поэтому для этого требуется 
третья пустая переменная ,
чтобы не потерять содержимое в переменной n1 , иначе Аля-Улю полетели волосы уарестантов
def fib(n):
    i = 0
    x1 = 0
    x2 = 1
    result = []
    while i < n:
        x3 = x1 + x2
        result.append(x1)
        x1 = x2
        x2 = x3
        i += 1
    return result
    

def summa(n):
    start = fib(n)
    end = []
    i = 0
    while i < n:
        if start[i] % 2 == 0:
            end.append(start[i])
        i += 1
    return sum(end), sum(end) < 4000000
    
if __name__ == "__main__":
    n = int(input("Введите количество елементов: "))
    if summa(n)[1]:
        print(summa(n)[0])
        
    else:
        print("Сумма четных елементов больше 4000000")