-2

リスト、L = [a,b,c,d]、およびこのリストのコピーと、再帰コードを含む for ループがあるとします。

    for item in L:
        if:
            *some base code*
            Lcopy.remove(item)
            L = []
            L += Lcopy[:]
        else:
            *some recursion code*
    return ...

しかし、すべての再帰が完了すると、L は元の状態に戻ります。コードが再帰に入ると、Python はそれが使用するリスト (L) に新しいメモリ アドレスを与えることを知っていますが、元の L、つまり最初の L を更新して値を削除することは可能ですか?それは削除されるはずだったのですか?

4

2 に答える 2

1

問題はL = []

これは、L新しく作成されたリストである別の値をポイントした直後です。

Pythonは、再帰の参照に関して特別なことは何もしません。リストは常に参照によって渡されます。割り当てはL、古いリストへの参照を壊します。

于 2013-02-28T18:52:57.223 に答える
0

あなたが持っているとき、その関数のローカル名を完全に新しいリストにL = []再割り当てしています。L代わりに同じリストを空にしたい場合は、次のようにその内容をすべて削除する必要があります。del L[:]

Python の実行モデルの詳細な説明と、変数への代入が実際に行うことについては、Jeff Knupp によるこのブログ投稿を確認してください。

于 2013-02-28T19:00:06.717 に答える