Уведомления

Группа в Telegram: @pythonsu

#1 Май 6, 2015 13:12:02

jony_77
Зарегистрирован: 2014-02-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальная переменная

Почему меняется глобальная переменная а?

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

Офлайн

#2 Май 6, 2015 13:17:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Глобальная переменная

потому что ты её в функцию передал и там изменяешь, нет?



Офлайн

#3 Май 6, 2015 13:18:55

jony_77
Зарегистрирован: 2014-02-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальная переменная

FishHook
потому что ты её в функцию передал и там изменяешь, нет?
нет, в функции (а) становится локальной. она не должна меняться

Офлайн

#4 Май 6, 2015 13:25:17

jony_77
Зарегистрирован: 2014-02-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальная переменная

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)

Офлайн

#5 Май 6, 2015 13:25:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Глобальная переменная

jony_77
нет, в функции (а) становится локальной. она не должна меняться
Нет, не становится! Потому что список в питоне - ссылочный тип, переменная всегда передаётся и присваивается по ссылке.



Офлайн

#6 Май 6, 2015 13:26:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Глобальная переменная

Магия!

a = [1, 2, 3, 4]
c = a
a[1] = "HAHAHA"
print c



Офлайн

#7 Май 6, 2015 13:31:41

jony_77
Зарегистрирован: 2014-02-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальная переменная

FishHook
Магия!

как сделать, чтоб (с) не менялась?

Офлайн

#8 Май 6, 2015 14:03:23

jony_77
Зарегистрирован: 2014-02-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Глобальная переменная

Ну что, подскажете ? Как сделать копию списка, чтоб не изменялся основной список (родитель)? Без переборки не обойтись чтоли ?

Офлайн

#9 Май 6, 2015 14:05:49

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Глобальная переменная

jony_77

c = a[:]
import copy
c = copy.copy(a)

Офлайн

#10 Май 6, 2015 14:06:09

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Глобальная переменная

Книгу почитайте хоть какую-нибудь…

P.S. Да. Без копии не обойтись. Используется модуль copy, если вложение достаточно большое или просто полный срез если список линейный.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version