Python の微妙な違い: "i = x" と "i = i x"
Python では、プログラマはよく " =" を次のように使用します。加算代入の省略形で、「i = i x」と同じように動作することが期待されます。ただし、この仮定は常に正しいとは限りません。
「i = x」は「__iadd__」メソッドを呼び出しますが、「i = i x」は「__add__」を呼び出します。ほとんどの場合、「__iadd__」と「__add__」は同等の結果を返します。ただし、これは対象のオブジェクトによって異なります。
可変オブジェクトの場合、「__iadd__」はその場でオブジェクトを変更し、「__add__」は新しいインスタンスを作成します。ただし、不変オブジェクトの場合、どちらのメソッドも新しいインスタンスを返します。
可変オブジェクトの場合、「__iadd__」はオブジェクトをその場で変更するのに便利で、メモリを節約できます。例:
a = [1, 2, 3] b = a b += [1, 2, 3] print(a) # [1, 2, 3, 1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
これを次と比較してください:
a = [1, 2, 3] b = a b = b + [1, 2, 3] print(a) # [1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
後者の例では、a と b は異なるオブジェクトになります。
特定のシナリオでは、「__add__」 「__radd__」を呼び出すこともできます。たとえば、オブジェクトが「__add__」を実装していない場合、インタプリタは他のオブジェクトの「__radd__」メソッドを使用しようとする可能性があります。
要約すると、「i = x」と「i = i x」は次のようになります。通常、可変オブジェクトと同等です。ただし、不変オブジェクトの場合、「__iadd__」と「__add__」は異なる動作を作成します。これらのニュアンスを理解することは、効果的な Python プログラミングにとって重要です。
以上が「i = x」が Python の「i = i x」と異なるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。