[:]은 무슨 뜻인가요?


95

일부 Python 코드를 분석하고 있는데 무엇인지 모르겠습니다.

pop = population[:]

방법. Java의 배열 목록이나 2 차원 배열과 같은 것입니까?


1
관련, 목록 지우기는 pop.clear () ..가 아닌 del pop [:] 또는 pop [:] = []을 수행해야만 가능합니다 (딕셔너리와 마찬가지로).
Macke

파이썬 조각의 좋은 SO 토론 : stackoverflow.com/questions/509211/...
스콧 C 윌슨

답변:


109

슬라이스 표기법의 예이며 population. 경우 population목록입니다,이 라인이 만들어집니다 얕은 복사 목록을. tuple또는 a 유형의 객체의 경우 str아무 작업도 수행하지 않으며 (라인이 없이도 동일하게 [:]수행됨) NumPy 배열의 경우 동일한 데이터에 대한 새 뷰를 생성합니다.


14
경우에 따라 슬라이스는 얕은 사본을 반환합니다.
André Caron

4
@ilius : 아마도 l.copy()더 읽기 쉬울 수 있지만 작동하지 않습니다.
Sven Marnach

13
list(l)항상 작동 더 읽을 수, 심지어 같은과 사본을 반환 보장numpy.array
로시 모순 어법

1
@Eli : 예, list.clear(). 그러나 이것이 SO에 대한 이러한 종류의 질문을 크게 줄일 때까지 약간의 시간이 걸릴 것입니다. :)
Sven Marnach

1
@MichaelGraczyk : 여기서 NumPy 배열에 대해 이야기하고 있다고 가정합니다. 를 사용하는 것보다 A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]거의 항상 선호합니다 numpy.rollaxis(A, axis, 0)[k]. 일반적으로 slice()객체 를 직접 생성해야하는 사용 사례는 거의 찾아 볼 수 없습니다 . 어쨌든 필요하다면 NumPy는 s_그것들을 생성하는 대체 방법으로 도우미를 제공 합니다.
Sven Marnach 2014

27

일반적으로 목록 조각이 목록의 일부를 복사한다는 사실을 아는 것도 도움이 될 수 있습니다. 예 population[2:4]를 들어 인구 [2]와 인구 [3]을 포함하는 목록을 반환합니다 (슬라이스는 오른쪽 배타적 임). population[:]기본값은 각각 0과 길이 (인구) 이므로 왼쪽과 오른쪽 인덱스 를 제외하고 전체 목록을 선택합니다. 따라서 이것은 목록의 사본을 만드는 일반적인 관용구입니다.


15

음 ... 이것은 정말 상황에 따라 다릅니다. 궁극적으로 slice객체 ( slice(None,None,None))를 __getitem__, __setitem__또는 __delitem__. (실제로 객체 __getslice__에.__getitem__ 되지만 현재는 더 이상 사용되지 않으며 사용해서는 안됩니다.)

개체는 슬라이스로 원하는 작업을 수행 할 수 있습니다.

문맥 상에:

x = obj[:]

이것은 obj.__getitem__전달 된 슬라이스 객체로 호출 됩니다. 사실 이것은 완전히 다음과 같습니다.

x = obj[slice(None,None,None)]

(전자는 아마도 더 효율적일 것입니다. slice 생성자 -모두 바이트 코드로 수행됩니다).

대부분의 개체에서 이것은 시퀀스 일부의 얕은 복사본을 만드는 방법입니다.

다음:

x[:] = obj

항목을 설정하는 방법입니다 (호출 __setitem__)obj .

그리고 아마 당신이 무엇을 추측 할 수있을 것 같아요 :

del x[:]

;-)를 호출합니다.

다른 슬라이스를 전달할 수도 있습니다.

x[1:4]

구성 slice(1,4,None)

x[::-1]

구성 slice(None,None,-1)등. 추가 읽기 : Python의 슬라이스 표기법 설명



6

이미 존재하는 목록에 새 이름을 할당하는 대신 목록의 복사본을 만듭니다.


5

[:]
배열에서 리미터 또는 슬라이싱에 사용됩니다. 해시
예 :
[1 : 5] 1 포함과 5 제외 사이의 값을 표시하는 데 사용됩니다
. 즉, 1-4 [start : end]

기본적으로 분할을 위해 배열에 사용됩니다. 표시 할 값 또는 키이며 ":"은 전체 어레이를 패킷으로 제한하거나 분할하는 데 사용됩니다.


1
이미 5 개의 유사한 답변과 허용 된 답변이있는 오래된 질문을 범할 이유가 없습니다. 게다가 a[1:5]2-4가 아닌 1-4 요소를 반환합니다.
Skamah One 2013

@SkamahOne 오, 모르겠어요. 이 경우는 아닐지 모르지만 죽은 질문을 제기하는 것이 가치있는 경우가 있습니다. 다른 통찰, 다른 표현 등등.이 경우 당신은 답을 고쳤고 그들은 희망적으로 무언가를 배웠습니다.
Pryftan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.