Найти - Пользователи
Полная версия: Глобальная переменная
Начало » Python для новичков » Глобальная переменная
1 2
jony_77
Почему меняется глобальная переменная а?
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
потому что ты её в функцию передал и там изменяешь, нет?
jony_77
FishHook
потому что ты её в функцию передал и там изменяешь, нет?
нет, в функции (а) становится локальной. она не должна меняться
jony_77
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
jony_77
нет, в функции (а) становится локальной. она не должна меняться
Нет, не становится! Потому что список в питоне - ссылочный тип, переменная всегда передаётся и присваивается по ссылке.
FishHook
Магия!
a = [1, 2, 3, 4]
c = a
a[1] = "HAHAHA"
print c
jony_77
FishHook
Магия!

как сделать, чтоб (с) не менялась?
jony_77
Ну что, подскажете ? Как сделать копию списка, чтоб не изменялся основной список (родитель)? Без переборки не обойтись чтоли ?
sander
jony_77
c = a[:]
import copy
c = copy.copy(a)
4kpt_III
Книгу почитайте хоть какую-нибудь…

P.S. Да. Без копии не обойтись. Используется модуль copy, если вложение достаточно большое или просто полный срез если список линейный.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB