ホームページ > バックエンド開発 > Python チュートリアル > 意図しない変更を避けるために Python リストの正確なコピーを作成するにはどうすればよいですか?

意図しない変更を避けるために Python リストの正確なコピーを作成するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-21 02:27:09
オリジナル
719 人が閲覧しました

How Can I Create a True Copy of a Python List to Avoid Unintentional Modifications?

変更せずに代入するためのリストの複製: 総合ガイド

Python では、new_list = my_list を使用して新しい変数にリストを代入することはできません。本物のコピー。代わりに、元のリストへの参照が作成されます。したがって、新しいリストを変更すると、元のリストも変更されます。

これらの予期しない変更を防ぐには、リストを複製またはコピーすることが不可欠です。以下にいくつかのアプローチを示します:

  • 組み込み list.copy() メソッド: (Python 3.3 および後で)
new_list = old_list.copy()
ログイン後にコピー
  • スライス:
new_list = old_list[:]
ログイン後にコピー
  • 組み込みリスト()コンストラクター:
new_list = list(old_list)
ログイン後にコピー
  • 汎用 copy.copy():
import copy
new_list = copy.copy(old_list)
ログイン後にコピー
  • 汎用 copy.deepcopy(): (コピー数ネストされた要素)
import copy
new_list = copy.deepcopy(old_list)
ログイン後にコピー

ネストされたリストとインスタンスを含むサンプルを考えます:

class Foo(object):
    def __init__(self, val):
        self.val = val

    def __repr__(self):
        return f'Foo({self.val!r})'

foo = Foo(1)

a = ['foo', foo]
b = a.copy()
c = a[:]
d = list(a)
e = copy.copy(a)
f = copy.deepcopy(a)

a.append('baz')  # Modify original list
foo.val = 5  # Modify nested instance

print(f'original: {a}\nlist.copy(): {b}\nslice: {c}\nlist(): {d}\ncopy: {e}\ndeepcopy: {f}')
ログイン後にコピー

出力:

original: ['foo', Foo(5), 'baz']
list.copy(): ['foo', Foo(5)]
slice: ['foo', Foo(5)]
list(): ['foo', Foo(5)]
copy: ['foo', Foo(5)]
deepcopy: ['foo', Foo(1)]
ログイン後にコピー

ご覧のとおり、元のリストとネストされたインスタンスは変更されましたが、ディープコピー (f) だけがそれらを正確にコピーし、前の内容を維持しました。値。

以上が意図しない変更を避けるために Python リストの正確なコピーを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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