복제된 목록: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!