본문 바로가기

Hacks

Python ...의 쓰임

개요

Python 코드에서 bracket안에 종종 보이는 ...의 쓰임에 대해 알아보자.

 

 

Python ...의 쓰임

Python 코드를 보면 가끔 아래와 같은 ... 표시를 볼 수 있다.

저게 정말 코드의 일부분인 걸까?

 

그렇다.

저 ...에는 2가지 쓰임이 있다.

 

1. Indexing 값 생략

...을 이용하면 indexing을 할 때 모든 차원의 값을 써주지 않아도 indexing을 할 수 있게끔 해준다.

예를 들어, 3차원의 배열을 indexing 할 때, 특히 n차원 배열의 마지막 차원의 벡터들을 indexing 할 때 ...을 사용하면 조금 더 손쉽게 indexing을 수행할 수 있다.

 

즉, 2번째 라인이 보여주는 결과를 ...으로 생략하여 씀으로써 똑같이 보여줄 수 있다.

 

2. 배열의 deepcopy 수행

배열을 copy 하는 데에 사용되는 함수들은 view(), copy()가 있다.

특히 copy() 함수를 사용하면 새로운 메모리 공간에 배열의 값을 복사하는 deepcopy의 결과물을 얻을 수 있다.

하지만, ...을 사용해도 deepcopy하여 배열의 값을 복사해낼 수 있다.

 

아래와 같은 배열이 있다고 가정해보자.

 

arr에는 (3,2) 차원, (1,2,3) 차원, (2,3,4) 차원의 배열이 담긴 list가 저장되어 있다.

val에는 (2,3,4) 차원의 배열이 있고 그 값들은 모두 0이다.

 

이때 아래와 같이 코드를 작성하여 arr의 세 번째 배열 즉, (2,3,4) 차원의 배열의 값을 바꾸려고 한다.

라인별로 설명하자면,

1. val 배열의 값을 arr의 세 번째 배열의 값에다가 덮어씌운다.

-> 이때 deepcopy가 발생한다.

 

2. val 배열의 마지막 차원의 0번째 축의 값들을 모두 5로 한다.

-> 만약 shallow copy가 일어났다면, arr의 세 번째 배열의 값도 5로 변경된다.

 

그럼, deepcopy가 잘 됐는지 확인하기 위해 출력 결과를 확인해보자.

위와 같이 그대로 초기의 val 값이 arr의 세 번째 배열에 잘 저장되어 있음을 확인할 수 있다.