Может ли кто-нибудь помочь мне понять это, пожалуйста? Я использую цикл while для увеличения целого числа в списке, а затем пытаюсь добавить список в другой список, чтобы создать список списков. Список списков имеет ожидаемое количество элементов, но все они показывают увеличенное целое число, как это было бы в конце цикла while, а не на каждой итерации цикла while.
Вот что я пробовал:
my_start_list = [1, 2, 3, 4]
my_end_list = []
while my_start_list[0] != 6:
my_start_list[0] += 1
my_end_list.append(my_start_list)
print(my_start_list)
print(my_end_list)
и вот что я получаю:
[6, 2, 3, 4]
[[6, 2, 3, 4], [6, 2, 3, 4], [6, 2, 3, 4], [6, 2, 3, 4], [6, 2, 3, 4]]
И я как бы ожидал:
[6, 2, 3, 4]
[[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]
Может ли кто-нибудь объяснить, что здесь происходит, или указать мне направление, которое могло бы объяснить это?
Вы должны создать копию списка, который собираетесь добавить, иначе вы всегда добавляете один и тот же список:
my_start_list = [1, 2, 3, 4]
my_end_list = []
while my_start_list[0] != 6:
my_start_list[0] += 1
my_end_list.append(my_start_list.copy()) # appends a copy of the list
print(my_start_list)
print(my_end_list)
Выход:
[6, 2, 3, 4]
[[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]
Здесь список, который вы добавляете, работает как указатель, а не как отдельный объект. поэтому вам нужно копировать список на каждой итерации.
my_start_list = [1, 2, 3, 4]
my_end_list = []
c = []
while my_start_list[0] != 6:
my_start_list[0] = my_start_list[0] + 1
c = my_start_list.copy()
my_end_list.append(c)
print(my_start_list)
print(my_end_list)
Выход:
[6, 2, 3, 4]
[[2, 2, 3, 4], [3, 2, 3, 4], [4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]
Отвечает ли это на ваш вопрос? Изменения списка списков неожиданно отражаются в подсписках