Pythonは名前を使ってオブジェクトを参照します。 a = b
と言うとき、a
とb
は同じオブジェクトを参照し、a
を変更すると、同じ変更がb
に表示されます。たとえば、Pythonはいつ新しいオブジェクトを作成する
a = [1, 2, 3]
b = a
a.append(4)
print(b)
は、[1, 2, 3, 4]
となります。
ただし、一部の操作では新しいオブジェクトが作成されます。たとえば、
a = 1
b = a
a = a + 1
print(b)
は、1
となります。明らかに、行a = a + 1
は、何らかの形で値がa + 1
の新しいオブジェクトを作成し、a
という名前をバインドします。これはどのように作動しますか?この場合、新しいオブジェクトを作成するメカニズムは何ですか?
この質問は、this oneの複製ではありません。この場合、オブジェクトの作成方法を具体的に尋ねていますが、他の質問はオブジェクトがオブジェクトを共有するときに一般的でした。
リストは可変です(それらをコピーするには 'コピー'またはスライスして '[:]'を使用します)、整数は不変です(文字列のように毎回再構築されます) –
[代入演算子](http://stackoverflow.com/questions/34521078/how-does-python-assign-values-after-assignment-operator) –
技術的には、私は 'a = a + 1' *が* Pythonは[-5、256]の範囲の整数をキャッシュするので、この特定のケースでは新しいオブジェクトです。むしろ、私は、キャッシュからあらかじめ作られた整数オブジェクトを 'a'に割り当てると思います。言い換えれば、 'a'は' b'とは異なるオブジェクトを指しますが、そのステートメントにはオブジェクトが作成されていません。私が間違っていれば、私を訂正してください。 – Tagc