취준하면서 회사 기술 면접에서 파이썬에 대한 질문들을 종종 받았었다. 그 중 파이썬의 자료인 list와 tuple에 대한 설명, 공통점, 차이점에 대한 질문을 받았다. 예상치못했던 질문이었고 너무 기초적인 부분밖에 기억나질 않아.. 답을 제대로 못한 것 같은 아쉬움이 남았다. 그래서 이 글을 통해 두 자료형에 대한 특징과 공통점, 차이점에 대해 정리해보고자 한다.
1. 특징
List [ ]
- list는 숫자, 문자열 등 어떠한 자료형을 요소로 가질 수 있다.
- 연산자 +를 사용해서 list와 list를 더할 수 있으며, 연산자 *를 사용해서 list를 반복할 수 있다.
Tuple ( )
- 요소 1개만 가질 때는 요소뒤에 쉼표(,)를 반드시 붙여야 한다. 예) t1 = (1, )
- 소괄호를 생략해도 된다. 예) t2 = 1, 2, 3, 4
- 연산자 +를 사용해서 tuple과 tupled을 더할 수 있으며, 연산자 *를 사용해서 tuple을 반복하여 새로운 tuple을 생성할 수 있다.
2. 공통점
- 순차적인 자료구조
- 여러 데이터를 담을 수 있는 컨테이너형 변수
- for문에 넣고 돌릴 수 있는 iterable 변수
- 문자열처럼 인덱싱과 슬라이싱이 가능하다.
3. 차이점
List [ ]
- list는 값을 수정하거나 삭제할 수 있다. (가변)
- list는 생성된 후 크기를 확장해야 하는 경우를 대비하여 추가 메모리 블록을 할당한다.
- 객체를 복사했을 때 새로운 객체로 복사되어 새로운 메모리에 값을 할당한다.
Tuple ( )
- tuple은 한 번 값을 설정하면 요솟값의 변화가 불가능하다. (불변)
- 불변하는 자료형이기 때문에 dictionary 자료형의 key값으로 가능한다.
- 대규모 프로젝트에서 디버그가 더 쉽다.
- tuple은 크기가 고정되어 있으므로 필요한 최소 메모리 블록만 할당하기 때문에 list보다 메모리 효율이 더 좋다.
- 객체를 복사했을 때 복사된 변수는 원본과 같은 객체를 가리킨다.
프로그램이 실행되는 동안 요솟값이 항상 변하지 않기를 바란다면 tuple을 사용해야 한다. 이와 반대로 수시로 그 값을 변화시켜야 할 경우라면 list를 사용해야 한다. 실제 프로그램에서는 값이 변경되는 형태의 변수가 훨씬 많기 때문에 평균적으로 tuple보다 list를 더 많이 사용한다.
4. 질문
Q. 값을 변경할 수 없는 tuple보다 값의 변경이 자유로운 list가 더 좋은 것 아닌가?? tuple 대신 list로 해놓고 값을 안바꾸면 되는 것이 아닌가? (의도 : tuple을 꼭 사용해야 하는 이유? 장점)
A. 값이 정해져 있는 경우며 변경될 필요가 없다면 tuple을 사용하는 것이 좋다. 그 이유는 가변객체인 list보다 더 적은 메모리를 필요로 하며, 속도도 빠르기 때문이다.
참조