>  기사  >  백엔드 개발  >  Python 목록 조각화는 요소의 복사본을 생성합니까?

Python 목록 조각화는 요소의 복사본을 생성합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-07 06:04:03892검색

Does Python List Slicing Create Copies of Elements?

사본 생성 없이 Python에서 목록 분할: 종합 가이드

핵심 개념: 참조 복사와 객체 복사

Python에서 목록을 분할해도 목록 내 개별 요소의 복사본이 생성되지 않습니다. 대신 해당 요소에 대한 참조를 복사하기만 하면 됩니다. 이는 불변(예: 정수) 개체와 변경 가능(예: 사전) 개체 모두에 해당됩니다.

정수 개체로 테스트

이를 입증하려면 다음을 고려하세요. 다음 코드:

<code class="python">a = [1000 + 1, 1000 + 1, 1000 + 1]
b = a[1:3]</code>

목록 a의 개체가 불변 정수임에도 불구하고 슬라이싱은 동일한 개체를 참조하는 새 목록 b를 만듭니다. 이는 동일한 ID를 통해 알 수 있습니다.

<code class="python">print(id(a[0]) == id(b[0]))  # True
print(id(a[1]) == id(b[1]))  # True</code>

메모리 오버헤드 검사

슬라이싱은 생성된 추가 목록 객체로 인해 일부 메모리 오버헤드를 발생시킵니다. 그러나 이 오버헤드는 목록의 길이에 관계없이 일정하며 일반적으로 객체 자체의 크기에 비해 무시할 수 있습니다.

대안: 효율적인 뷰를 위한 Numpy 배열

메모리 보존이 가장 중요한 관심사인 경우 Python 목록 대신 numpy 배열 사용을 고려하세요. numpy 배열을 분할하면 원본 데이터에 대한 뷰가 생성되어 동일한 메모리 공간을 공유합니다. 이는 대규모 데이터 세트가 있는 시나리오에서 매우 유리할 수 있습니다.

그러나 뷰를 사용하려면 여러 뷰에서 의도하지 않은 수정이 발생할 수 있는 등 추가 고려 사항이 따른다는 점에 유의하는 것이 중요합니다. 코드에서 예상치 못한 결과를 방지하려면 이 동작을 이해하는 것이 중요합니다.

위 내용은 Python 목록 조각화는 요소의 복사본을 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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