개요
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의 세 번째 배열에 잘 저장되어 있음을 확인할 수 있다.
'Hacks' 카테고리의 다른 글
Python numpy 및 tensor의 차원 열벡터, 행벡터 인덱싱 (1) | 2023.05.08 |
---|---|
@classmethod, @property (0) | 2023.01.31 |
공백 입력이 들어왔을 때, while문 종료하기 (0) | 2023.01.13 |
python 차원 이해하기 (with numpy) (0) | 2022.12.21 |
2 by 2에서 역행렬을 구해보자. (0) | 2022.11.23 |