문제:
정수 목록이 주어지면 다음의 모든 하위 목록을 생성합니다. 생성하지 않고 효율적으로 [0, len(L)-1]의 k에 대해 L[k:] 형식을 생성합니다.
답변:
Python에서 목록을 분할하면 기본 개체의 복사본이 생성되지 않고 해당 개체에 대한 참조만 생성됩니다.
이를 입증하기 위해 동일한 값을 가진 세 개의 정수 객체를 고려해보세요. 값:
a = [1000 + 1, 1000 + 1, 1000 + 1]
개별 개체 ID가 있어 별도의 개체임을 나타냅니다.
map(id, a) # returns [140502922988976, 140502922988952, 140502922988928]
이러한 개체를 슬라이싱하면 동일한 참조를 가진 새 목록 개체가 생성되어 새로운 개체가 없음을 나타냅니다. 객체가 생성되었습니다:
b = a[1:3] map(id, b) # returns [140502922988952, 140502922988928]
이 동작은 불변(예: 정수) 및 가변 객체 모두에 적용됩니다. (예: 목록) 값.
슬라이싱은 새 개체를 생성하지 않지만 참조 복사 및 목록 메타데이터 유지 관리로 인해 일부 메모리 오버헤드가 발생합니다. 예를 들어 N 요소가 있는 목록의 메모리 오버헤드는 72바이트입니다.
메모리 최적화가 중요한 경우 numpy 배열을 분할하여 목록 대신 numpy 배열을 사용하는 것을 고려하세요. 슬라이스와 원본 배열 간에 메모리를 공유합니다. 그러나 이 접근 방식에서는 실수로 인한 수정을 방지하기 위해 신중하게 처리해야 합니다.
Python에서 목록을 슬라이싱하는 것은 기본 개체의 복사본을 생성하지 않는 효율적인 작업입니다. 성능 최적화를 고려할 때 이 동작을 고려해야 합니다.
위 내용은 Python에서 목록을 분할하면 기본 개체의 복사본이 생성되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!