반응형
[Python] python list와 tuple차이, 파이썬 리스트와 튜플차이
파이썬 리스트, python list
파이썬 리스트는 대괄호([,])를 사용하여 여러 데이터들을 묶어놓은 집합입니다.
아래는 리스트 데이터의 정의, 인덱싱 및 슬라이싱을 보여주는 예제 입니다.
>>> t = ['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
>>> t
['foo', 'bar', 'baz', 'qux', 'quux', 'corge']
>>> t[0]
'foo'
>>> t[-1]
'corge'
>>> t[1::2]
['bar', 'qux', 'corge']
파이썬 튜플, python tuple
파이썬 튜플은 괄호((,))를 사용하여 여러 데이터들을 묶어놓은 집합입니다.
아래는 튜플 데이터의 정의, 인덱싱 및 슬라이싱을 보여주는 예제 입니다.
>>> t = ('foo', 'bar', 'baz', 'qux', 'quux', 'corge')
>>> t
('foo', 'bar', 'baz', 'qux', 'quux', 'corge')
>>> t[0]
'foo'
>>> t[-1]
'corge'
>>> t[1::2]
('bar', 'qux', 'corge')
python list와 tuple 공통점, 파이썬 리스트와 튜플 공통점
먼저, 리스트와 튜플은 각 요소들에 대해 순서를 가집니다.
리스트나 튜플의 요소들을 순서대로 배치하지 않으면, 비교(==)시 서로 다른
a = ['foo', 'bar', 'baz', 'qux']
b = ['baz', 'qux', 'bar', 'foo']
print(a == b) # false
c = ('foo', 'bar', 'baz', 'qux')
d = ('baz', 'qux', 'bar', 'foo')
print(c == d) # false
a = ['foo', 'bar', 'baz', 'qux']
b = ['foo', 'bar', 'baz', 'qux']
print(a == b) # true
a = ['foo', 'bar', 'baz', 'qux']
c = ('foo', 'bar', 'baz', 'qux')
print(a == c) # false
또 다른 공통점으로는 한 리스트나 튜플에 여러 자료형을 넣을 수 있습니다.
예를 들어, 아래와 같이 문자와 실수, 정수, 불린값등을 같이 넣을 수 있습니다.
# 아래와 같이 선언 가능합니다
a = [21.42, 'foobar', 3, 4, 'bark', False, 3.14159]
b = (21.42, 'foobar', 3, 4, 'bark', False, 3.14159)
python list와 tuple 차이점, 파이썬 리스트와 튜플 차이점
앞서 본 내용상으로, 리스트와 튜플은 대괄호를 사용하느냐, 괄호를 사용하느냐의 차이만 있어보입니다.
하지만, 다른점이 몇가지 있습니다.
1. mutable, immutable
가장 큰 차이점은 리스트는 요소의 값을 바꿀 수 있으나, 튜플은 변경불가합니다.
이를 변경가능하다를 mutable, 변경불가하다를 immutable이라고 표현하기도 합니다.
예를 들어, 아래와 코드와 같이 a[0]의 값을 10으로 할당이 가능하나,
튜플의 요소인 b[0]의 값을 10으로 할당을 하려고 하면 에러가 발생합니다.
a = ['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
2. 사용가능한 메소드
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' 요소가 추가가 됩니다.
a = ['foo', 'bar']
a.append('test')
하지만 아래 코드(튜플)는 에러를 발생시킵니다.
b = ('foo', 'bar')
b.append('test') # AttributeError: 'tuple' object has no attribute 'append'
3. list에서의 over allocation
리스트에서는 실제 데이터의 크기보다 더 큰 메모리를 할당받습니다.
튜플은 요소 수가 변하지 않기에 메모리 크기를 fix할 수 있는데 반해,
list는 요소 수가 얼마든지 변할 수 있습니다.
list의 요소 수가 증가할 때마다 메모리를 할당받게 되면 속도저하가 많이 일어날 수 있기에
미리 메모리 크기를 더 할당하게 됩니다.
아래 예제 코드는 리스트와 튜플의 메모리 크기를 확인하는 코드입니다.
기본적으로 빈 리스트와 튜플은 각각 56, 40 byte씩 차지하며, 한 요소당 필요한 메모리는 8byte입니다.
요소수가 4개일 때, 리스트는 56 + 4*8 = 88보다 훨씬 큰 120byte의 크기를 할당받은것을 확인할 수 있고,
튜플은 40 + 4*8 = 72 딱 크기에 맞게 메모리 할당된 것을 확인을 할 수 있습니다.
또한, 리스트의 경우, 요소수가 하나 더 증가하더라도 120으로 유지되는것을 볼 수 있습니다.
미리 할당하여, 나중에 요소가 추가될 때 메모리 할당에 대한 시간소요를 적도록 하였습니다.
from 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
728x90
반응형
'파이썬 - Python' 카테고리의 다른 글
pytorch lightning으로 딥러닝 시작하기, pytorch lightning 샘플코드 살펴보기 (0) | 2022.12.06 |
---|---|
[Python] 파이썬 is와 ==의 차이, python is, ==, identity, equality (0) | 2022.11.15 |
[Python] 파이썬 주석,파이썬 주석처리, 파이썬 주석 단축키, 파이썬 주석 단축키 안됨, 파이썬 주석 해제, 파이썬 주석 제거 (0) | 2022.10.13 |
[Python] python 줄바꿈, python 줄바꾸기, 파이썬 줄바꿈, 파이썬 줄바꾸기 (0) | 2022.06.08 |
[Python] 파이썬 리스트, python list, 파이썬 리스트 메소드, 파이썬 리스트 메서드, 파이썬 리스트란 (0) | 2022.06.08 |
댓글