Python

Очень странная проблема в питоне очень странная

вот мой код:
 def sortup(inp): 
back = ""
leng = len(inp)-1
while back != inp:
back = inp
for num in range(leng):
print(back)
if inp[num] > inp[num+1]:
inp[num],inp[num+1] = inp[num+1],inp[num]
print(back)
return inp
def main():
print("itog = " + str(sortup(input("input pls: ").split())))
if __name__ == "__main__":
main()
функция sortup должна сортировать список по возрастанию. почему то
for num in range(leng):
print(back)
if inp[num] > inp[num+1]:
inp[num],inp[num+1] = inp[num+1],inp[num]
print(back)
каким то образом изменяет переменную back хотя она там не трогается помогите пж
Никто не изменяет переменную back, кроме совершенно избыточного присваивания back = inp в цикле. Изменяется список, на который она ссылается. Как раз приведёнными тобой строчками кода. Хочешь сделать копию списка, а не ссылки на список, пиши так:
 back = inp.copy() 

Только надо понимать, что копирование большого списка и сравнение больших списков в каждой итерации - это долго.
Molor Ch.
Molor Ch.
87 571
Лучший ответ
Ростислав Матвеев ты понимаешь что пишешь? back=inp присваетвается чтобы остановить цикл если он ничего не изменил а в
for num in range(leng):
print(back)
if inp[num] > inp[num+1]:
inp[num],inp[num+1] = inp[num+1],inp[num]
print(back)
каким то образом изменяется back
зачем while back != inp: back = inp
ты же тутже вылетишь из этого цикла
если ты делаешь сортировку пузырьком то да, там действително нужен вайл в этом месте и нужна проверка отсортирован ли массив.
то что ты хочешь сделать это сравнить массив до и после внутренниго форика и если он не изменился значит он уже отсортирован, но питонище это обьектно ориентированый язык и вместо = надо использовать клонирование массива в другую переменную.
ваще такой пузырек очень плохой не знию кто тебя так научил, что тебе кроме квадратной сортировки еще на каждом шагу надо чекать не остсортирован ли массив когда ты тоже самое делаешь внутри
короче нужно чекать флагом, заходил ли он в условие под фориком хоть раз:
F=True
while F:
F=False
for num in range(leng):
if inp[num] > inp[num+1]:
#если хоть раз сюда зашел значит массив еще не отсотрирован и нужна еще #одна итерация
F=True
inp[num],inp[num+1] = inp[num+1],inp[num]
print(back)
return inp