ホームページ > バックエンド開発 > Python チュートリアル > Python の「i = x」と「i = i x」の微妙な違いは何ですか?

Python の「i = x」と「i = i x」の微妙な違いは何ですか?

Patricia Arquette
リリース: 2024-12-04 17:13:10
オリジナル
822 人が閲覧しました

What's the Subtle Difference Between `i  = x` and `i = i   x` in Python?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート