2017-07-01 6 views
0
>>> a = 2 
>>> b = a 
>>> b 
2 
>>> a = 20 
>>> b 
2 

bの最後のインスタンスも20に戻ります.bはaに割り当てられているため変更されましたか? bは、その後2であるaに格納される量、に初期化されている例で変数Aは変数Bに割り当てられます.Aが変更された場合、Aも変更すべきではありませんか?

+1

これは変更可能なオブジェクトのための真のですが、ない不変のものを。 –

+3

@Coldspeed、この場合、変数 "points"は異なる値であり、必ずしも不変オブジェクトに限定されるものではありません: 'a = object(); b = a; a = object(); (a!= b)== True' – Elisha

+1

必要な読書:https://nedbatchelder.com/text/names1.html – chepner

答えて

3

Pythonではすべてがオブジェクトであり、何かを割り当てるときは、実際にオブジェクトへの参照を割り当てます。

変数は、どこかに存在するオブジェクトのラベルに過ぎないと考えています。その理由のため、Pythonは実際には変数「名前」を呼び出します。

a = 2を実行すると、値2を持つintオブジェクトの名前はaになります。 b = aを実行すると、aが別の名前を参照するオブジェクトがbになります。したがって、両方の変数は同じオブジェクトを参照します。ここまでは順調ですね。

今すぐa = 20を実行すると、aが参照している名前が変更されます。値を保持する別のintオブジェクトを参照するために名前を使用しています。これは、値2を保持している他のオブジェクトには影響しません。それでも名前はbです。だから何かを割り当てることは、オブジェクトのラベルを変更するだけです。そのようにオブジェクトを変更することは決してありません。

オブジェクトを変更した場合とは異なります。最も一般的な例はリストである:ちょうど前のような

a = ['hello'] 
b = a 

ab同じlistオブジェクトの名前です。 b.append('world')を呼び出してbを突き止めた場合、bが参照するオブジェクトを突然変異させています。しかしaはまだ同じlistオブジェクトを参照し、そのaを見たときに、あなたもこれらの変更が表示されます。 `int`よう

>>> a = ['hello'] 
>>> b = a 
>>> b.append('world') 
>>> a 
['hello', 'world'] 
0

は、aintオブジェクトが不変であるようにBを変更しないことが20の値を再割り当てされます。ここ

がBが割り当てられている例である:すなわち、baであったが、aが変更されると、それは効果がb

a = 2 

b = a #here, storing the contents of a in b 

#b now stores 2 

a = 20 #here, only changes the value that is stored in a. 

#b is still 2 

編集に格納されていないこと値を有します

a = 2 

b = 3 

a = b #now, a stores the value that b contains 

#a is now 3 

#b is still 3 
+0

内容の代わりに、bがaに代入されている例を挙げることもできますか? –

+0

@MitchellvanZuylen最近の私の編集をご覧ください。それが意味をなさないかどうか私に教えてください。 – Ajax1234