리스트는 순서가 있는 변경 가능 컨테이너이고, 튜플은 순서가 있는 변경 불가능 컨테이너다.

board = [[0] * 9 for _ in range(10)]
copy = board[:]       # 바깥 리스트만 복사
copy[0][0] = 1
print(board[0][0])    # 1

독립된 행을 만들 때 `[[0] * 9] * 10`을 쓰면 같은 행 객체를 열 번 참조한다. 리스트 컴프리헨션으로 행을 매번 새로 만든다.

슬라이스 `items[start:stop:step]`의 stop은 포함하지 않는다. 음수 인덱스 -1은 마지막 원소다. `a, b = pair`는 언패킹이고, `first, *middle, last = values`처럼 나머지를 목록으로 받을 수 있다.

튜플은 변경 불가능하지만 안에 리스트를 담을 수 있다. 변경 불가능하다는 말은 튜플이 가리키는 객체를 다른 객체로 교체할 수 없다는 뜻이다.

Python 7. 리스트, 튜플, 슬라이스의 핵심 흐름도
그림. 슬라이스는 바깥 컨테이너만 복사할 수 있어 내부 공유를 확인한다.