>백엔드 개발 >파이썬 튜토리얼 >Python에서 목록을 분할하면 기본 개체의 복사본이 생성되나요?

Python에서 목록을 분할하면 기본 개체의 복사본이 생성되나요?

Susan Sarandon
Susan Sarandon원래의
2024-11-08 14:55:021121검색

Does Slicing a List in Python Create Copies of the Underlying Objects?

Python에서 복사본을 생성하지 않고 목록 분할

문제:
정수 목록이 주어지면 다음의 모든 하위 목록을 생성합니다. 생성하지 않고 효율적으로 [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 배열을 분할하여 목록 대신 numpy 배열을 사용하는 것을 고려하세요. 슬라이스와 원본 배열 간에 메모리를 공유합니다. 그러나 이 접근 방식에서는 실수로 인한 수정을 방지하기 위해 신중하게 처리해야 합니다.

결론

Python에서 목록을 슬라이싱하는 것은 기본 개체의 복사본을 생성하지 않는 효율적인 작업입니다. 성능 최적화를 고려할 때 이 동작을 고려해야 합니다.

위 내용은 Python에서 목록을 분할하면 기본 개체의 복사본이 생성되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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