2016-05-23 3 views
0

私はこのような変数に値を割り当てました。それは素晴らしい仕事です。なぜ両方のリストをPythonで割り当てるのですか

In [16]: var1 = var2 = 5 
In [17]: var1 = 2 
In [18]: var2 
Out[18]: 5 
In [19]: var1 
Out[19]: 2 

listと同じ操作が行われました。

In [20]: list1 = list2 = [] 
In [21]: list1.append(5) 
In [22]: list1 
Out[22]: [5] 
In [23]: list2 
Out[23]: [5] 

同じ方法は2つのリストを初期化しました。 list1に値を挿入した後、それはlist2という値になります。どのように起こっている。なぜこのように起こっているのだろう?誰でも説明してください。

おかげ

+0

これらは同じ操作ではありません。最初のものでは 'var1'を再バインドしますが、2番目のものでは* list1'を変更します。 –

答えて

5

あなたがlist1 = list2 = []を言った後、リスト1とリスト2は同じリストオブジェクトです。したがって、そのオブジェクトに新しい要素を追加するときには、名前がlist1であるか、名前がlist2であるかにアクセスします。

this earlier SO questionへの回答が啓発されている可能性があります。 (おそらく、この質問はその質問と重複して表示されるべきですか?)

+0

プログラミングごとに異なるオブジェクトが必要ですか? Python言語やコーディング方法の欠陥ですか? –

+0

いいえ、まったく同じオブジェクトの2つの名前です。 –

+0

例えば、 'list2 = list1 [:]'は同じ要素で新しいリストを作成し、一方を変更しても他のリストを変更しない場合、コピーを明示的に作成することができます。 –

関連する問題