# 리스트
리스트는 생성후 수정할 수 있음.
## 리스트 관련 함수
- list(): 다른 데이터 타입을 리스트로 변환
- append(): 리스트의 끝에 새 항목을 추가
- extend(): 리스트 병합
- insert(): 원하는 위치에 항목 추가
- del: 원하는 위치의 항목 삭제
- remove(): 항목 삭제
- pop(): 오프셋을 항목을 얻은 후 삭제
- index(): 값으로 항목 오프셋 찾기
- in(): 존재여부 확인
- count(): 값 세기
- join(): 문자열로 변환
- sort(): 리스트 정렬 (매개변수에 revrese=True를 입력하면 내림차순)
- sorted(): 정렬된 복사본을 반환
- len(): 항목 개수
- copy(): 새로운 리스트로 복사
# 튜플
튜플은 생성후 수정할 수 없음.
## 튜플 생성
```python
empty_tupe = () # ()
one_marx = 'Groucho', # ('Groucho',)
marx_tuple = 'Groucho', 'Chico', 'Harpo' # ('Groucho', 'Chico', 'Harpo')
```
튜플 정의시에는 괄호가 필요없음(해도 됨).
두개 이상의 요소가 있을 경우, 마지막 요소에는 콤마를 붙이지 않는다.
## 튜플 언패킹(tuple unpacking)
```python
marx_tuple = ('Groucho', 'Chico', 'Harpo')
a, b, c = marx_tuple
a # 'Groucho'
b # 'Chico'
c # 'Harpo'
```
## 튜플 관련 함수
- tuple(): 다른 객체를 튜플로 만듦
## 네임드 튜플
네임드 튜플은 튜플의 서브클래스로써, 이름과 위치로 값에 접근할 수 있다.
네임드 튜플을 사용하려면 `namedtuple`을 불러와야 한다.
```python
from collection import namedtuple
Duck = namedtuple('Duck', 'bill tail')
duck = Duck('wide orange', 'long')
duck # Duck(bill='wide orange', tail='long')
duck.bill # 'wide orange'
duck.tail # 'long'
```
또한 딕셔너리에서 네임드 튜플을 만들 수 있다.
```python
parts = {'bill': 'wide orange', 'tail'='long'}
duck2 = Duck(**parts)
duck2 # Duck(bill='wide orange', tail='long')
```
네임드 튜플은 불변하지만 필드를 바꿔서 다른 네임드 튜플을 만들 수 있다.
```python
duck3 = duck2._replace(tail='magnificent', bill='crushing')
```
### 네임드 튜플의 특징
- 불변하는 객체처럼 행동한다
- 객체보다 공간 효율성과 시간 효율성이 더 좋다
- 딕셔너리 형식의 괄호 대신, 점 표기법으로 속성을 접근할 수 있다.
- 네임드 튜플을 딕셔너리의 키처럼 쓸 수 있다.