
[Python] python list와 tuple차이, 파이썬 리스트와 튜플차이
파이썬 리스트, python list
파이썬 리스트는 대괄호([,])를 사용하여 여러 데이터들을 묶어놓은 집합입니다.
아래는 리스트 데이터의 정의, 인덱싱 및 슬라이싱을 보여주는 예제 입니다.
1 | t = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge'] |
파이썬 튜플, python tuple
파이썬 튜플은 괄호((,))를 사용하여 여러 데이터들을 묶어놓은 집합입니다.
아래는 튜플 데이터의 정의, 인덱싱 및 슬라이싱을 보여주는 예제 입니다.
1 | t = ('foo', 'bar', 'baz', 'qux', 'quux', 'corge') |
python list와 tuple 공통점, 파이썬 리스트와 튜플 공통점
먼저, 리스트와 튜플은 각 요소들에 대해 순서를 가집니다.
리스트나 튜플의 요소들을 순서대로 배치하지 않으면, 비교(==)시 서로 다른것으로 비교됩니다.
1 | a = ['foo', 'bar', 'baz', 'qux'] |
또 다른 공통점으로는 한 리스트나 튜플에 여러 자료형을 넣을 수 있습니다.
예를 들어, 아래와 같이 문자와 실수, 정수, 불린값등을 같이 넣을 수 있습니다.
1 | # 아래와 같이 선언 가능합니다 |
python list와 tuple 차이점, 파이썬 리스트와 튜플 차이점
앞서 본 내용상으로, 리스트와 튜플은 대괄호를 사용하느냐, 괄호를 사용하느냐의 차이만 있어보입니다.
하지만, 다른점이 몇가지 있습니다.
mutable, immutable
가장 큰 차이점은 리스트는 요소의 값을 바꿀 수 있으나, 튜플은 변경불가합니다.
이를 변경가능하다를 mutable, 변경불가하다를 immutable이라고 표현하기도 합니다.
예를 들어, 아래와 코드와 같이 a[0]의 값을 10으로 할당이 가능하나,
튜플의 요소인 b[0]의 값을 10으로 할당을 하려고 하면 에러가 발생합니다.1
2
3
4
5a = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
b = ('foo', 'bar', 'baz', 'qux', 'quux', 'corge')
a[0] = 10
b[0] = 10 #TypeError: 'tuple' object does not support item assignment사용가능한 메소드
- list에서는 아래와 같은 메소드를 사용할 수 있습니다.
- append() 리스트 끝에 요소 추가 Adds an element at the end of the list
- clear() 모든 요소를 제거 Removes all the elements from the list
- copy() 리스트를 복사 Returns a copy of the list
- count() 리스트 요소의 갯수를 리턴 Returns the number of elements with the specified value
- extend() 다른 리스트들의 요소들을 추가 Add the elements of a list (or any iterable), to the end of the current list
- index() 특정 값이 나오는 첫번재 요소의 인덱스 리턴 Returns the index of the first element with the specified value
- insert() 특정 위치에 요소 추가 Adds an element at the specified position
- pop() 특정 위치의 요소를 제거 Removes the element at the specified position
- remove() 특정값이 나오는 첫번째 아이템을 제거 Removes the first item with the specified value
- reverse() 리스트를 역순으로 정렬 Reverses the order of the list
- sort() 리스트를 정렬 Sorts the list
- 그러나, tuple에서는 아래와 같은 메소드만 사용가능합니다.
- count() 튜플 요소의 갯수를 리턴 Returns the number of times a specified value occurs in a tuple
- index() 특정 값이 나오는 첫번재 요소의 인덱스 리턴 Searches the tuple for a specified value and returns the position of where it was found
예를 들어, 아래 코드는 a에 ‘test’ 요소가 추가가 됩니다.
1 | a = ['foo', 'bar'] |
하지만 아래 코드(튜플)는 에러를 발생시킵니다.
1 | b = ('foo', 'bar') |
- list에서의 over allocation
리스트에서는 실제 데이터의 크기보다 더 큰 메모리를 할당받습니다.
튜플은 요소 수가 변하지 않기에 메모리 크기를 fix할 수 있는데 반해,
list는 요소 수가 얼마든지 변할 수 있습니다.
list의 요소 수가 증가할 때마다 메모리를 할당받게 되면 속도저하가 많이 일어날 수 있기에
미리 메모리 크기를 더 할당하게 됩니다.
아래 예제 코드는 리스트와 튜플의 메모리 크기를 확인하는 코드입니다.
기본적으로 빈 리스트와 튜플은 각각 56, 40 byte씩 차지하며, 한 요소당 필요한 메모리는 8byte입니다.
요소수가 4개일 때, 리스트는 56 + 48 = 88보다 훨씬 큰 120byte의 크기를 할당받은것을 확인할 수 있고,
튜플은 40 + 48 = 72 딱 크기에 맞게 메모리 할당된 것을 확인을 할 수 있습니다.
또한, 리스트의 경우, 요소수가 하나 더 증가하더라도 120으로 유지되는것을 볼 수 있습니다.
미리 할당하여, 나중에 요소가 추가될 때 메모리 할당에 대한 시간소요를 적도록 하였습니다.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19from sys import getsizeof
l = []
t = tuple()
print(getsizeof(l)) #56
print(getsizeof(t)) #40
l = [1,2,3,4]
t = (1,2,3,4)
print(getsizeof(l)) #120
print(getsizeof(t)) #72
l = [1,2,3,4,5]
t = (1,2,3,4,5)
print(getsizeof(l)) #120
print(getsizeof(t)) #80
총평
대부분의 예제 코드나, 실제 개발할때는 tuple을 잘 안쓰는것 같습니다.
튜플의 가장 큰 특징이 immutable과 메모리를 적게 차지한다가 될 수 있는데,
python은 데이터 분석하는데 많이 쓰이기 때문에 수시로 데이터가 많이 추가/제거 될수 있고,
얼마나 데이터가 추가될지 예상할 수 없기 때문이기에 tuple을 잘 사용하지 않는가 싶습니다.
메모리에 대한 문제는 요즘에는 서버든 개인pc든 충분히 큰 메모리를 사용할 수 있기에 신경쓰지 않는것은 아닐까 싶습니다.
만일 메모리를 비롯한 성능이 정말 중요하다면 python 보다는 c, c++같은 저수준의 언어를 써서 더 최적화를 하는게 좋은 선택이 될 수 있지 않을까 합니다.
[Python] python list와 tuple차이, 파이썬 리스트와 튜플차이
#파이썬,#python,#리스트,#튜플,#list,#tuple