クローン リスト: Python での整合性の維持
Python では、既存のリストに新しい変数を割り当てると浅いコピーが作成され、影響を受けやすくなります。予期しないリストの変更。この動作が発生する理由を明らかにし、リストの不変性を確保するための効果的なクローン作成方法を検討してみましょう。
代入によってクローンが作成されない理由:
new_list = を実行するときmy_list の場合、同じリスト オブジェクトへのポインタを new_list に割り当てます。どちらの変数も元のリストを参照し、その後の変更は new_list と my_list の両方で表示されます。
リストの効果的なコピー:
本物のクローンを作成するには、次のようにします。いくつかのアプローチ:
1. list.copy() の使用:
Python 3.3 で導入されたこのメソッドは、リストの個別のコピーを作成します。
**2。 [:]:**
でリストをスライスするこの構文は、元のリストと同じ要素を持つ新しいリストを作成します。
3.リスト コンストラクター (list()) の使用:
これにより、別のリストなどの既存の反復可能オブジェクトから新しいリストが作成されます。
4. copy.copy() の使用:
この組み込み関数は、ほとんどのユースケースに十分な基本的な浅いコピーを提供します。
5. copy.deepcopy() の使用:
このより包括的なメソッドは、ネストされたオブジェクトも複製されるディープ コピーを作成します。
例:
これらの結果を比較してみましょうメソッド:
import copy my_list = ['foo', 'bar'] new_list = my_list.copy() sliced_list = my_list[:] list_constructor_list = list(my_list) shallow_copy_list = copy.copy(my_list) deep_copy_list = copy.deepcopy(my_list) my_list.append('baz') print(f'Original list: {my_list}') print(f'Copied list: {new_list}') print(f'Sliced list: {sliced_list}') print(f'List constructed from iterator: {list_constructor_list}') print(f'Shallow copy: {shallow_copy_list}') print(f'Deep copy: {deep_copy_list}')
出力:
Original list: ['foo', 'bar', 'baz'] Copied list: ['foo', 'bar'] Sliced list: ['foo', 'bar'] List constructed from iterator: ['foo', 'bar'] Shallow copy: ['foo', 'bar'] Deep copy: ['foo', 'bar']
出力から明らかなように、my_list は 'baz' を追加した後に変更されますが、複製されたリストは変更されません。
以上がPython でリストを適切に複製し、予期しない変更を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。