>백엔드 개발 >파이썬 튜토리얼 >Python에서 목록의 불변 복사본을 어떻게 만들 수 있나요?

Python에서 목록의 불변 복사본을 어떻게 만들 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 03:37:14765검색

How Can I Create an Immutable Copy of a List in Python?

불변 목록 복사본 만들기

Python에서는 new_list = my_list와 같은 목록 참조를 할당하는 동안 new_list를 수정하면 놀랍게도 my_list에 영향을 미칩니다. 이는 별개의 새 목록을 생성하는 대신 Python이 실제 목록에 대한 참조만 복사하여 new_list와 my_list가 모두 동일한 목록을 가리키기 때문에 발생합니다.

이 문제를 해결하고 예기치 않은 변경을 방지하려면 다음이 필수적입니다. 다양한 방법을 사용하여 목록의 실제 복사본을 만듭니다.

목록 복제

변경할 수 없는 복제본 또는 목록의 얕은 복사본인 경우 다음 옵션을 고려하세요.

  • list.copy() 메서드(Python 3.3 ):
new_list = old_list.copy()
  • 목록 슬라이싱:
new_list = old_list[:]
  • 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.