変更せずに代入するためのリストの複製: 総合ガイド
Python では、new_list = my_list を使用して新しい変数にリストを代入することはできません。本物のコピー。代わりに、元のリストへの参照が作成されます。したがって、新しいリストを変更すると、元のリストも変更されます。
これらの予期しない変更を防ぐには、リストを複製またはコピーすることが不可欠です。以下にいくつかのアプローチを示します:
new_list = old_list.copy()
new_list = old_list[:]
new_list = list(old_list)
import copy new_list = copy.copy(old_list)
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 サイトの他の関連記事を参照してください。