불변한 값들의 나열
순서를 가지며, 서로 다른 타입의 요소를 가질 수 있음
변경 불가능(immutable), 반복 가능(iterable)
소괄호(()) 혹은 tuple()을 통해 생성
인덱스로 값에 대한 접근 가능, 값 변경 불가능(추가/삭제 포함)
tuple은 우리가 만들어쓰는 것 보다 파이썬 내부적으로 사용
여러 데이터들이 연속된 메모리 공간에 저장되어 있는 자료구조
int arr[5] = {70, 80, 20, 100, 90};
index를 통해 데이터에 빠르게 접근
배열의 길이는 변경 불가능, 변경하려면 새로 생성
데이터 타입 고정
데이터가 담긴 여러 노드들이 순차적으로 연결된 형태의 지료구조

처음 노드부터 순차적으로 탐색
연결 리스트의 길이 자유롭게 변경 가능 -> 삽입, 삭제 편리
다양한 데이터 타입 저장
데이터가 메모리에 연속적으로 저장되지 않음
배열과 연결리스트를 합친게 파이썬의 리스트
인덱스로 데이터에 접근 가능
길이 자유롭게 변경 가능
L.append(x) : 마지막 항목에 x를 추가
L.insert(i, x) : 인덱스 i에 항목 x를 삽입
L.remove(x) : 가장 왼쪽 x를 제거, x 존재하지 않을 시 ValueError
L.pop(i) : 인덱스 i 항목 반환 후 삭제, 빈 경우 마지막 항목 반환 후 삭제
L.clear() : 모든 항목 삭제
L.extend(m) : L + m시퀀스
L.index(x, start, end) : 리스트에 있는 항목 중 가장 왼쪽 x의 인덱스 반환
numbers = [1, 2, 3, 4]
print(numbers.index(3)) # 2
L.reverse() : 순서를 반대로 뒤집음, None 반환
L.sort(key)
: 원본 리스트 정렬, None 반환, 정렬의 기준으로 reverse, key를 사용할 수 있으며(sorted도 동일) key에는 단일인자를 반환하는 함수가 와야함(보통 lambda 사용)
# sort
numbers = [3, 2, 5, 1]
result = numbers.sort()
print(numbers, result) # [1, 2, 3, 5] None (원본 변경)
# sorted
result = sorted(numbers)
print(numbers, result) # [3, 2, 5, 1] [1, 2, 3, 5]
# 원본 변경 없이 정렬된 리스트 반환
# reverse
numbers.sort(reverse=True) # [5, 3, 2, 1]
# reverse의 기본값은 False(오름차순)
# key 사용
ranked_movies = [{...}, {...}, {...}] # 요소가 딕셔너리 형태의 영화 정보인 리스트
ranked_movies.sort(key = lambda l: l['vote_average'])
L.count(x) : x의 개수 반환