Я играю for
циклов в Python и пытаюсь привыкнуть к тому, как они обрабатывают переменные.
Возьмите следующий код для кода:
a=[1,2,3,4,5]
b=a
b[0]=6
После этого нулевой элемент как b
и a
должен быть 6
. Знак =
указывает на ссылку в массиве, да?
Теперь я беру цикл for
:
a=[1,2,3,4,5]
for i in a:
i=6
Мое ожидание будет то, что каждый элемент теперь a
6
, потому что я предположил бы, что i
указывает на элементы в, а не копировать их; a
однако, похоже, это не так.
Уточнение будет оценено, спасибо!
Все в python рассматривается как ссылка. Что происходит, когда вы делаете b[0] = 6
, вы назначаете 6
в соответствующее место, определенное LHS этого выражения.
Во втором примере вы назначаете ссылки из массива на i
, так что i
равно 1, затем 2, затем 3,... но i
никогда не являюсь элементом массива. Поэтому, когда вы назначаете ему 6, вы просто меняете вещь, которую i
представляю.
http://docs.python.org/reference/datamodel.html является интересным, если вы хотите узнать больше о деталях.
Это не так, как это работает. Цикл for выполняет итерацию через значения a. Переменная я на самом деле не имеет смысла того, что есть в себе. В основном, что происходит:
# this is basically what the loop is doing:
# beginning of loop:
i = a[0]
i = 6
# next iteration of for loop:
i = a[1]
i = 6
# next iteration of for loop:
i = a[2]
i = 6
# you get the idea.
Ни при каких обстоятельствах значение при индексе не меняется, единственное, что нужно изменить, это значение i.
Вы пытаетесь это сделать:
for i in xrange(len(a)):
a[i] = 6 # assign the value at index i
Как вы сказали, "Знак = указывает на ссылку". Таким образом, ваша петля просто переназначает ссылку "i" на 5 разных номеров, каждая по очереди.
i
это ссылка на значения в но назначение изменитсяa
i
быть ссылка на что - то другое, и целые неизменны так нет никакого способа изменить список OP, изменяяi
в циклеfor
. Но рассмотримa = [[1], [2]]
тогдаfor i in a: i[:] = [6]
.a
станет[[6], [6]]
.a
являются изменяемыми типами сами по себе. Он не имеет ничего общего с положением в a, скорее он имеет отношение к объектам, независимо от того, находятся они в или нет.