2013-09-19 4 views
-1

У меня есть две функции, А и В:Списки в Python

def A(): 
    my_list = [1, 2, 3] 
    while some_condition(my_list): 
     # ... (make changes to my_list) 
    solution = B(my_list) 

def B(my_list): 
    my_list.append(4) 
    # ... (find a solution) 
    return solution 

У меня есть список в моей функции А. Я хочу передать этот список в качестве аргумента для работы B. Функция B вносит изменения в него чтобы получить ответ, но я не хочу, чтобы изменения, внесенные в список в функции B, отражались в списке в функции A, так как я хочу найти несколько ответов, используя тот же список. Каков наилучший способ изолировать изменения, внесенные в функцию B из функции A?

+0

Просьба предоставить код, чтобы мы не преследовали наши хвосты, задавая десятки вопросов – dawg

ответ

1

Вы, вероятно, хотите, чтобы передать копию списка B:

def A(): 
    ... 
    B(list(mylist)) # shallow copy of mylist 
    ... 

Это должно быть хорошо, если вы не планируете на мутирует элементы, содержащиеся в списке (а только видоизменяется список). Если это не так, вы можете создать глубокую копию, используя copy.deepcopy().

Из вашего редактирования это выглядит как список целых чисел. Поскольку целые числа неизменяемы, вы можете использовать первый подход без проблем: B(list(mylist)).

Примечание что вы не должны использовать list как имя переменной, так как это уже имя встроенной функции. Вместо этого я использовал «mylist».

+0

это сработало ..! большое спасибо – kartik

Смежные вопросы