2016-11-18 13 views
0

空リストを次の関数で実行しています。リストはgpです。リストの末尾に手紙を追加し、それが9の長さに達したらそれをリセットするという考えがありました。ただし、gpが9文字に達すると、新しい文字の追加が停止されます。 def upd(gp): gp.append(random.choice(string.letters)) if len(gp) > 9: gp = [] これを通過した後にPythonリストがリセットされない

+0

@mhawkeは答えがあります - これは暗黙の参照セマンティクスを持つ言語では一般的な初心者エラーです(変数とパラメータはそのオブジェクトの値ではなく実際のオブジェクトへの参照として機能しますが、他の暗黙の参照からオブジェクトへの割り当て以外のほとんどの操作では暗黙の参照解除が行われ、オブジェクトではなく参照がコピーされます)。もちろん、参照はすばやく簡単に渡すことができ、暗黙的な参照は混乱を軽減します。 – Steve314

答えて

3

リストgpを変化させませんgp = []を設定し、それは単にローカル変数gpは空のリストであることを再バインド。外部リスト(gpの関数に渡された)は、この再バインドの影響を受けません。

あなたがする必要があるのは、明示的にリストから項目を削除することです。あなたは、このように一度にすべての項目を削除することができます

def upd(gp): 
    gp.append(random.choice(string.letters)) 
    if len(gp) > 9: 
     gp[:] = [] 

は今、これが効果的にすべての項目を削除し、場所にリストgpを変異されます。それを行うための他の方法があります。 del gp[:]も動作し、Python 3のgp.clear()(ありがとう@PeterDeGlopper)。

+0

または少なくとも3.3の場合、 'gp.clear()'があります。 –

+0

@PeterDeGlopper:ありがとう、私は答えにあなたのポイントを追加しました。 – mhawke

関連する問題