-1

我有两个功能,A和B:

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

我的函数 A 中有一个列表。我想将此列表作为参数传递给函数 B。函数 B 对其进行更改以获得答案,但我不希望对函数 B 中的列表所做的更改反映函数 A 中的列表,因为我希望使用同一个列表找到多个答案。将功能 B 中所做的更改与功能 A 隔离的最佳方法是什么?

4

1 回答 1

1

您可能希望将列表的副本传递给B

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

如果您不打算改变列表中包含的元素(而只是改变列表本身),这应该没问题。如果不是这种情况,您可能需要使用copy.deepcopy().

从您的编辑来看,该列表似乎是一个整数列表。由于整数是不可变的,因此您可以毫无问题地使用第一种方法:B(list(mylist)).

请注意,您不应将list其用作变量名,因为这已经是内置函数的名称。我在mylist上面使用了“”。

于 2013-09-19T15:08:41.573 回答