ホームページ > バックエンド開発 > Python チュートリアル > Python で「i = x」と「i = i x」が異なる結果を生成するのはどのような場合ですか?

Python で「i = x」と「i = i x」が異なる結果を生成するのはどのような場合ですか?

Susan Sarandon
リリース: 2024-12-08 00:50:16
オリジナル
828 人が閲覧しました

When Do `i  = x` and `i = i   x` Produce Different Results in Python?

代入と拡張が異なる場合: "i = x" と "i = i x" の比較

での = 演算子の使用Python は、特定のシナリオで予期しない動作を引き起こす可能性があります。 i = x と i = i x の違いを調べて、いつ発散するかを理解しましょう。

演算子のオーバーロードを理解する

= 演算子は iadd メソッド (存在する場合)、または add メソッド (存在する場合) iadd は使用できません。対照的に、演算子は主に add メソッドを呼び出します。

可変オブジェクトと不変オブジェクト

= の動作は、オブジェクトがassign は可変 (変更可能) または不変 (変更不可) です。不変オブジェクトの場合は、 = と新しいインスタンスを作成します。ただし、

iadd は元のオブジェクトを変更して変数名に割り当て直し、以前の参照を上書きします。

例: Lists

違いについては、次のコードを考慮してください。

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 を変更します。 place は、両方の変数が同じリストを参照するため、 a に影響します。

次に次のことを考えてみましょう。

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 = b [1, 2, 3] により新しいリストが作成されます。を変更せずに残します。これは、

add メソッドを呼び出し、新しいインスタンスを返すためです。

Exception Handling for ' ='

x の場合。 __add__ が実装されていないか、NotImplemented を返し、x と y の型が異なる場合、演算子は y.__radd__ が存在する場合はそれにフォールバックします。したがって、以下は同等です:

foo_instance += bar_instance
ログイン後にコピー
foo_instance = bar_instance.__radd__(bar_instance, foo_instance)
ログイン後にコピー

サブクラスのオーバーライド

foo_instance と bar_instance の型が異なり、bar_instance が foo_instance のサブクラスである場合、 bar_instance.__radd__ はその前に試行されますfoo_instance.__add__.これにより、サブクラスがスーパークラスの動作をオーバーライドできるようになります。

結論

Python プログラミングで予期しない結果を回避するには、i = x と i = i x の違いを理解することが重要です。 。これらの演算子がいつどのように異なる動作をするかを知ることで、不変オブジェクトと可変オブジェクトの両方を効果的に操作できます。

以上がPython で「i = x」と「i = i x」が異なる結果を生成するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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