jony_77
Май 6, 2015 13:12:02
Почему меняется глобальная переменная а?
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
FishHook
Май 6, 2015 13:17:04
потому что ты её в функцию передал и там изменяешь, нет?
jony_77
Май 6, 2015 13:18:55
FishHook
потому что ты её в функцию передал и там изменяешь, нет?
нет, в функции (а) становится локальной. она не должна меняться
jony_77
Май 6, 2015 13:25:17
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
FishHook
Май 6, 2015 13:25:27
jony_77
нет, в функции (а) становится локальной. она не должна меняться
Нет, не становится! Потому что список в питоне - ссылочный тип, переменная всегда передаётся и присваивается по ссылке.
FishHook
Май 6, 2015 13:26:55
Магия!
a = [1, 2, 3, 4]
c = a
a[1] = "HAHAHA"
print c
jony_77
Май 6, 2015 13:31:41
FishHook
Магия!
как сделать, чтоб (с) не менялась?
jony_77
Май 6, 2015 14:03:23
Ну что, подскажете ? Как сделать копию списка, чтоб не изменялся основной список (родитель)? Без переборки не обойтись чтоли ?
sander
Май 6, 2015 14:05:49
jony_77import copy
c = copy.copy(a)
4kpt_III
Май 6, 2015 14:06:09
Книгу почитайте хоть какую-нибудь…
P.S. Да. Без копии не обойтись. Используется модуль copy, если вложение достаточно большое или просто полный срез если список линейный.