Python の "i = x" と "i = i x" の微妙な違い
Python では、代入演算子 "=変数に値を割り当てます。ただし、拡張代入演算子 " =" は、変更されるオブジェクトのタイプに応じて動作が若干異なります。
違いを理解する鍵は、マジック メソッド「__iadd__」にあります。そして「__追加__」。拡張代入演算子が使用される場合は「__iadd__」が呼び出され、通常の「 " 演算子が使用される場合は「__add__」が呼び出されます。
可変オブジェクトと不変オブジェクト
" =" と " " の主な違いは、可変オブジェクトと不変オブジェクトを扱うときに明らかになります。不変オブジェクトは変更できないため、通常、そのマジック メソッドは新しいインスタンスを返します。一方、変更可能なオブジェクトは変更でき、そのマジック メソッドは通常、オブジェクト自体を変更します。
不変オブジェクト (整数など) の場合
の場合整数のような不変オブジェクトでは、「 」と「 」の両方が同じ効果を持ちます。新しい整数を作成し、それを変数に割り当てます。例:
i = 1 i += 1 # Same as i = i + 1
可変オブジェクト (リストなど) の場合
リストのような可変オブジェクトの場合、「 」の動作は「 」とは異なります。次の例を考えてみましょう:
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]
この場合、「 =」を使用すると、リスト「b」がその場で変更されます。 "a" と "b" はどちらも同じ変更されたリストを指すようになりました。
これを次のように比較してください。
a = [1, 2, 3] b = a b = b + [1, 2, 3] print(a) # [1, 2, 3] print(b) # [1, 2, 3, 1, 2, 3]
ここで、" " を使用すると、新しいリストが作成されます。 、「b」に割り当てられます。 "a" は元のリストを指しているため、影響を受けません。
結論
要約すると、" =" と " " のどちらを選択するかは、リストのタイプによって異なります。オブジェクトが割り当てられています。不変オブジェクトの場合、両方の演算子は同等です。可変オブジェクトの場合、「 」はオブジェクトをその場で変更し、「 」はコピーを作成します。
以上がPython の「i = x」と「i = i x」の微妙な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。