2015-01-16 7 views
0

У меня есть глобальная переменная в одной функции, которая используется как аргумент для другого. Как я могу использовать его в качестве аргумента без изменения второй функции?глобальные переменные python как аргументы

Пример:

variable = [] 

def bar(x): 
    x[2] = 4 
    print x 

def foo(): 
    global variable 
    variable = [1, 2, 3, 4] 
    bar(variable) 
    print variable 

Запуск foo() как это выведет:

[1, 2, 4, 4] 
[1, 2, 4, 4] 

Когда я хочу, чтобы напечатать:

[1, 2, 4, 4] 
[1, 2, 3, 4] 

Так есть ли способ сохранить оригинал глобальную переменную для будущего использования, все еще используя ее в другой функции?

+0

Передайте копию этого? –

+0

Возможный дубликат [Как клонировать или копировать список в Python?] (Http://stackoverflow.com/questions/2612802/how-to-clone-or-copy-a-list-in-python) – user3467349

ответ

2

Если вы хотите, чтобы содержимое списка было передано до bar, но вы не хотите, чтобы изменения влияли на исходный список, а затем скопируйте список, когда вы его передаете. Вы можете сделать это, просто изменив:

bar(variable) 

к:

bar(variable[:]) 

[] обозначение может быть использовано для создания срезов списков, которые являются копиями определенных диапазонов индексов.
[:] конкретно дает вам копию всего списка.

+0

Idk why это было уменьшено, но это правильный ответ, возможно, вы должны упомянуть, что переменная [:] разрезает список, чтобы сделать копию полного списка. – user3467349

+0

@ user3467349 Я тоже не знаю. Спасибо за предложение. – khelwood

1

Если вы хотите переслать копию списка, просто используйте bar(variable[:]). Как это:

variable = [] 

def bar(x): 
    x[2] = 4 
    print x 

def foo(): 
    global variable 
    variable = [1, 2, 3, 4] 
    bar(variable[:]) 
    print variable 

Это Выведет:

>>> foo() 
[1, 2, 4, 4] 
[1, 2, 3, 4] 
Смежные вопросы