Форум сайта python.su
0
Почему меняется глобальная переменная а?
def chek(a,b): for n in range(len(a)): for nn in range(len(a[n])): if b[n][nn]=='x': a[n]=a[n][:nn]+'x'+a[n][(nn+1):] a=['000','000'] b=['xxx','xxx'] chek(a,b) print a
Офлайн
568
потому что ты её в функцию передал и там изменяешь, нет?
Офлайн
0
FishHookнет, в функции (а) становится локальной. она не должна меняться
потому что ты её в функцию передал и там изменяешь, нет?
Офлайн
0
FishHookа так почему ?
потому что ты её в функцию передал и там изменяешь, нет?
def chek(c,b): for n in range(len(с)): for nn in range(len(c[n])): if b[n][nn]=='x': c[n]=c[n][:nn]+'x'+c[n][(nn+1):] a=['000','000'] b=['xxx','xxx'] c=a chek(c,b) print a
Отредактировано jony_77 (Май 6, 2015 13:27:19)
Офлайн
568
jony_77Нет, не становится! Потому что список в питоне - ссылочный тип, переменная всегда передаётся и присваивается по ссылке.
нет, в функции (а) становится локальной. она не должна меняться
Офлайн
568
Магия!
a = [1, 2, 3, 4] c = a a[1] = "HAHAHA" print c
Офлайн
0
FishHook
Магия!
Офлайн
0
Ну что, подскажете ? Как сделать копию списка, чтоб не изменялся основной список (родитель)? Без переборки не обойтись чтоли ?
Офлайн
53
jony_77
c = a[:]
import copy c = copy.copy(a)
Офлайн
39
Книгу почитайте хоть какую-нибудь…
P.S. Да. Без копии не обойтись. Используется модуль copy, если вложение достаточно большое или просто полный срез если список линейный.
Офлайн