Я пытался понять, как работает следующий код,
def mergeSort(a):
if len(a) > 1:
mid = len(a)//2
left = a[:mid]
right = a[mid:]
mergeSort(left)
mergeSort(right)
i = j = k = 0
while i < len(left) and j < len(right):
if left[i] < right[j]:
a[k] = left[i]
i += 1
else:
a[k] = right[j]
j += 1
k += 1
while i < len(left):
a[k] = left[i]
i += 1
k += 1
while j < len(right):
a[k] = right[j]
j += 1
k += 1
return a
С Репетитор по Python, когда я заметил, что цикл while манипулирует списком A из предыдущего вызова. Для меня это выглядит так, будто это выходит за рамки, но это явно не так.
Можете ли вы сказать мне, что мне не хватает, что я думаю, это замена элементов списка вне области видимости?
1 ответ
Не существует такого понятия, как «действие вне рамок». Правила Python гарантируют, что переменная может быть изменена только тогда, когда она находится в области видимости.
Однако иногда несколько переменных относятся к одному и тому же объекту. В случае функции это часто происходит с передачей по ссылке. Вот пример:
def change_element(a):
a[1] = 42
x = list(range(10)
print(x)
change_element(x)
print(x)
Здесь вы увидите изменения элемента x
, потому что список передается в change_element()
по ссылке. Это означает, что x
и a
оба относятся к одному и тому же объекту списка.
Ваш пример действительно делает именно такие вещи.
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.