불변 목록 복사본 만들기
Python에서는 new_list = my_list와 같은 목록 참조를 할당하는 동안 new_list를 수정하면 놀랍게도 my_list에 영향을 미칩니다. 이는 별개의 새 목록을 생성하는 대신 Python이 실제 목록에 대한 참조만 복사하여 new_list와 my_list가 모두 동일한 목록을 가리키기 때문에 발생합니다.
이 문제를 해결하고 예기치 않은 변경을 방지하려면 다음이 필수적입니다. 다양한 방법을 사용하여 목록의 실제 복사본을 만듭니다.
목록 복제
변경할 수 없는 복제본 또는 목록의 얕은 복사본인 경우 다음 옵션을 고려하세요.
new_list = old_list.copy()
new_list = old_list[:]
new_list = list(old_list)
목록 전체 복사
복사해야 하는 경우 목록의 요소에도 깊은 복사를 사용합니다.
import copy new_list = copy.deepcopy(old_list)
예
다음 코드를 고려하세요.
import copy class Foo: 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) # edit orignal list and instance a.append('baz') foo.val = 5 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)]
이것은 원본 목록과 해당 인스턴스에 대한 수정 사항이 원본 목록에만 영향을 미치고 복사된 버전(b, c, d 및 f)에는 영향을 미치지 않습니다.
위 내용은 Python에서 목록의 불변 복사본을 어떻게 만들 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!