-1

A と B の 2 つの関数があります。

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 に答える