ホームページ >バックエンド開発 >Python チュートリアル >リスト上の Python Append() と = : 異なる結果が得られるのはなぜですか?
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 サイトの他の関連記事を参照してください。