Не могу понять почему при работе функции происходит сортировка списка в глобальной переменной

gvv2307

Новичок
Пользователь
Дек 25, 2022
1
0
1
Здравствуйте. В функцию передаётся аргумент scores, который записывается в параметр scores. Происходит сортировка, return не используется, но вызов print(scores) после функции показывает отсортированный список. Не могу понять, как из локальной области видимости результат был записан в глобальную переменную.
Linux Mint 20.3 Una
Python 3.9.13

Python:
scores = [60, 50, 60, 58, 54, 54, 58, 50, 52, 54, 48, 69, 34,
          55, 51, 52, 44, 51, 69, 64, 66, 55, 52, 61, 46, 31,
          57, 52, 44, 18, 41, 53, 55, 61, 51, 44]


def bubble_sort(scores):
    swapped = True

    while swapped:
        swapped = False
        for i in range(0, len(scores) - 1):
            if scores[i] > scores[i+1]:
                temp = scores[i]
                scores[i] = scores[i+1]
                scores[i+1] = temp
                swapped = True

bubble_sort(scores)
print(scores)
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
Дело в типе данных, а именно список scores является изменяемым. При передаче этого списка в функцию bubble_sort происходит копирование ссылки на список, а не самого списка. Это значит, что параметр scores в функции bubble_sort указывает на тот же список, что и глобальная переменная scores. Следовательно, изменения в функции отражаются и на глобальную переменную.
 
  • Мне нравится
Реакции: regnor

Форум IT Специалистов