Порядок присваивания в пайтон
Я никак не могу найти в интернете этот вопрос, поэтому пишу сюда. Задача такая: написать алгоритм сортировки пузырьком, записывая каждый шаг в массив и вывести историю изменений в консоль.
У меня в консоль выводится только самое последнее изменение несколько раз. Почему так происходит? Как мне исправить эту ошибку, чтоб выводилась вся история?
def bubble_sort(colors):
# Сюда записываем историю сортировки и исходные значения
history = []
history.append(colors)
# Сортировка пузырьком
for i in range(len(colors) - 1):
for j in range(len(colors) - 1):
if colors[j] < colors[j + 1]:
# Обмен значений
colors[j], colors[j + 1] = colors[j + 1], colors[j]
history.append(colors)
return history
def main():
colors = [0x33, 0x23, 0x22, 0x44, 0xFF]
result = bubble_sort(colors)
# Вывод на экран всей истории
for i in range(len(result)):
print(result[i])
main()
Ответы (1 шт):
Почему так происходит: в history добавляются не значения списка colors, а ссылка на сам список. По сути там хранится одно и тоже несколько раз. Это можно увидеть, выводя на экран history в каждой итерации.
Как исправить: заменить
history.append(colors)
на
history.append(colors.copy())
PS. Вместо
for i in range(len(result)):
print(result[i])
в питоне используется
for i in result:
print(i)
И старайтесь не давать переменным имена из одной буквы. Даже num или index намного понятней, чем просто i.