`x = [4]` は `x` を変更するのに、`x = x [4]` は Python で新しいリストを作成するのはなぜですか?

Susan Sarandon
リリース: 2024-10-30 02:09:03
オリジナル
836 人が閲覧しました

Why Does `x  = [4]` Modify `x` but `x = x   [4]` Create a New List in Python?

異なる動作: list.__iadd__ と list.__add__

次の謎めいた Python コードを考えてみましょう:

x = y = [1, 2, 3, 4]
x += [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4, 4]
ログイン後にコピー

次に、これを次のコード スニペットと並べてみましょう:

x = y = [1, 2, 3, 4]
x = x + [4]
print(x)  # [1, 2, 3, 4, 4]
print(y)  # [1, 2, 3, 4]
ログイン後にコピー

私たちを困惑させるのは、彼らの行動の明らかな違いです。 x = [4] は元のリスト x を変更し、x = x [4] は新しいリストを生成するのはなぜですか?

答えは Python のオブジェクト メソッドにあります。 list.__iadd__ は、2 番目のリストの要素を既存のリストに追加することによって、既存のリストを変更します。逆に、list.__add__ は、両方の入力リストの要素で構成される新しいリストを作成します。

x = y のような式は、最初に __iadd__ の呼び出しを試みます。 __iadd__ が利用可能な場合、この突然変異マジックが実行されます。それ以外の場合は、デフォルトで __add__ が使用され、新しいリストが作成され、それが x に割り当てられます。 list クラスは __iadd__ を定義しているため、最初のコード スニペットは元の x リストを変更しますが、後のコード スニペットは新しいリストを作成して x に代入し、y は変更されません。

以上が`x = [4]` は `x` を変更するのに、`x = x [4]` は Python で新しいリストを作成するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!