2017-11-08 9 views
0

問題は基本的には、同じリストではない新しいリストに新しい参照を返すlist + [something]を使用していてもリストの内容を変更するリストを持つ関数を呼び出した後ですリストとして。関数に渡した後に破損するリスト

コード例:

def foo(a): 
    #modifying the list using del and remove 

def bar(b): 
    alist = b 
    foo(alist + [something]) 
    #at this point alist != the original alist 

私もlist(alist)を使用してTMPのリストを作ってみましたし、alist + [something]

を、私は実際のコードを参照するためにペーストビンここで使用することはできますか?

+0

「alist」は変更しないでください。それはそれの要素を変えるかもしれませんが、それは全く同じことではありません。 –

+0

@ IgnacioVazquez-Abrams要素が変わるのはなぜですか?私たちは 'foo'の中で別のリストを使用していませんか? – Zed

+0

新しいリストを作成しましたが、新しい要素を作成していません。 –

答えて

0

あなたのリストalistにはいくつかのサブリストが含まれていると思います。この場合、alist + [something]を実行しても、そのサブリストへのポインタは引き続き機能してfoo()になります。

難しくて迅速な解決策があります。単純にPythonのdeepcopy()関数を次のように使用してください。これはあなたのリスト内のすべてのものをメモリに複製します。

from copy import deepcopy 
def bar(b): 
    b_copy = deepcopy(b) 
    foo(b_copy) 
関連する問題