Код
def change1(list1):
list1[1] = list1[1] + 5
def change2(number):
number = number + 2
def main():
numbers = [4, 8, 12]
change1(numbers)
variable = 15
change2(variable)
i = 0
while i < 3:
print numbers[i]
i += 1
print variable
main()
Когда я читал его, я думал, что он выдаст 4 8 12 15
, но выводит 4 13 12 15
.Я вижу здесь, что Python по-разному работает с целыми числами и списками, я предположил, что последнее невозможно без глобального.Я не могу понять вывод, в таком случае, почему бы не выводить 4 13 12 17
?
Здесь вы можете увидеть почти идентичный код с разными типами и разными ссылками:
$ python test2.py
4
13
12
15
$ python test3.py
4
13
12
17
$ cat test2.py test3.py
Примеры передачи по ссылке
test2.py: тип передачи по ссылке и изменяемый тип -example.Таблицы / списка недостаточно, чтобы повлиять на локальную переменную в main, вам нужен Справочник!
def change1(list1):
list1[1] = list1[1] + 5
def change2(number):
number = [x+2 for x in number]
def main():
numbers = [4, 8, 12]
change1(numbers)
variable = [15]
change2(variable)
i = 0
while i < 3:
print numbers[i]
i += 1
print variable[0]
main()
test3.py: пример передачи по ссылке, изменяющий изменяемый список / таблицу типов данных вне главнойfunction
def change1(list1):
list1[1] = list1[1] + 5
def change2(number):
number[0] += 2
def main():
numbers = [4, 8, 12]
change1(numbers)
variable = [15]
change2(variable)
i = 0
while i < 3:
print numbers[i]
i += 1
print variable[0]
main()
примеры передачи по значению
test4.py: пытаясь найти пример с передачей по значению, почему он не работает?
$ cat test4.py
# Not yet a pass-by-value example!
global variable
variable = [15]
def change1(list1):
list1[1] = list1[1] + 5
def change2(number):
number = [x+2 for x in number]
def main():
numbers = [4, 8, 12]
change1(numbers)
#variable = 15
change2(variable)
i = 0
while i < 3:
print numbers[i]
i += 1
print variable[0]
main()
$ python test4.py
4
13
12
15 # I expected 17! Why no 17?