2012-04-22 5 views
4

リストをコピーしますか?コードでは私が理解していないそのx = x[:]を見ています。どのように両方のコピーを同じものと呼ぶことができますか?[:]はどのようにPythonで動作しますか?

+8

「a = a + 1」と同じです。最初に 'a + 1'が評価され、結果は' a'の現在の値を上書きします。しかし、 'x = x [:]'は不要です。 'x'が関数の引数であり、引数のコピーを強制したいのでなければです。 –

答えて

6

右が評価され、一時変数に配置され、xが一時変数に再割り当てされます。もちろん、あなたはそれを見ることはありません。

2

「[:]はどのようにPythonで動作しますか?

は、それ自体で、この特定の表現の文脈で、それは a = aを言って本当に好きだとして発生する可能性が高いではありません
x = x[:] 

少しトリッキー です。

あなたは、簡単な言葉でxによって参照リストのコピーを作成し、aに割り当て

a = x[:] 

のようなものを参照してくださいする可能性が高くなります。

あなたは、単に

a = x 

をした場合は、両方の変数が同じ場所に参照することになり、変数のいずれかへの変更は両方に反映されるだろう。ここで

は、あなたがコロン表記を使用していない場合は何が起こるかである例えば、a = x

In [31]: x = range(5) 
In [32]: a = x 

In [33]: a 
Out[33]: [0, 1, 2, 3, 4] 

In [34]: x 
Out[34]: [0, 1, 2, 3, 4] 

In [35]: a[3] = 99 # I am making a change in a 

In [36]: a 
Out[36]: [0, 1, 2, 99, 4] 

In [37]: x 
Out[37]: [0, 1, 2, 99, 4] # but x changes too! 

a = x[:]

In [38]: x = range(5) 
In [39]: a = x[:] 

In [40]: a 
Out[40]: [0, 1, 2, 3, 4] 

In [41]: x 
Out[41]: [0, 1, 2, 3, 4] 

In [42]: a[3] = -99  

In [43]: a 
Out[43]: [0, 1, 2, -99, 4] # a changes 

In [44]: x 
Out[44]: [0, 1, 2, 3, 4] # x does not change 

注意して、この比較:@gnibblerが短く、完全な例を提供します( コメントの下)x = x[:]が出現する可能性があります。このコンテキストでは、 という割り当てが有用な目的に役立つでしょう(ただし、あなたがどのような状況で来たのかはわかりませんこれを元に)。

+1

私は[Felixのコメント](http://stackoverflow.com/questions/10273186/how-does-work-in-python#comment13212644_10273186)が頭の爪に当たって_これが行われると思います。 – sarnold

+2

@sarnold良い点..ちょうどそれも見た。私は質問自体 "[:]はどのようにPythonで動作するのですか" – Levon

+0

既存のリストを削除するには、x = x [:]を実行してください。 – richo

関連する問題