リスト上の Python Append() と = : 異なる結果が得られるのはなぜですか?

DDD
リリース: 2024-10-27 20:55:30
オリジナル
851 人が閲覧しました

 Python Append() vs.  = on Lists: Why Do They Give Different Results?

Python Append() とリストの = 演算子: 結果の矛盾を理解する

Python では、append() メソッドと =演算子を使用してリストを変更できます。ただし、これらの操作は、特に入れ子になったリストを処理する場合に、予期しない結果を引き起こすことがあります。この記事の目的は、2 つのアプローチの動作が異なる理由を説明することです。

= 演算子

= 演算子は、右側のリストの要素をリストに追加します。左側のリスト。元のリストが変更され、更新されたリストが返されます。例:

<code class="python">c = [1, 2, 3]
c += c  # This is equivalent to c.extend(c)
print(c)  # Output: [1, 2, 3, 1, 2, 3]</code>
ログイン後にコピー

この場合、= 演算子は c の要素を c と連結し、元のサイズの 2 倍のリストが生成されます。

append()メソッド

append() メソッドは、指定されたオブジェクトをリストの最後に挿入します。 = 演算子とは異なり、append() メソッドはオブジェクトの要素を連結せず、元のリストへの参照として追加します。例:

<code class="python">c = [1, 2, 3]
c.append(c)  # This is equivalent to c.insert(len(c), c)
print(c)  # Output: [1, 2, 3, [...]]</code>
ログイン後にコピー

この場合、append() メソッドはリスト c の末尾に参照を追加します。これにより、c[-1] と c が同じオブジェクトを参照する循環参照が発生します。 c を出力すると、出力 [1, 2, 3, [...]] が得られます。ここで、[...] は無限再帰を表します。

なぜ違いますか?

= 演算子と append() メソッドの主な違いは、前者は指定されたオブジェクトの要素に作用するのに対し、後者はオブジェクト全体を扱うことです。 = を使用してリストを追加すると、Python は要素を連結し、各要素を新しいリストに効果的にコピーします。対照的に、append() を使用してリストを追加する場合、Python は元のリストに参照を追加するだけです。リストにそれ自体への参照が含まれている場合、無限再帰が発生する可能性があります。

代替

2 つのリストを連結することが目的の場合は、= 演算子の代わりに extend() メソッドを使用できます。 extend() メソッドは = と同様に機能しますが、元のリストは変更されません。例:

<code class="python">c = [1, 2, 3]
c.extend(c)
print(c)  # Output: [1, 2, 3, 1, 2, 3]</code>
ログイン後にコピー

以上がリスト上の Python Append() と = : 異なる結果が得られるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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