300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- dp
- 파이썬
- 구글 킥스타트
- 백준
- linux
- 프로그래밍
- 프로그래머스
- 운영체제
- 네트워크
- 딥러닝
- 동적 프로그래밍
- AI
- 코딩
- OS
- 코딩테스트
- 킥스타트
- CSS
- PYTHON
- nlp
- DFS
- BFS
- 리눅스
- 그래프
- 브루트포스
- google coding competition
- 알고리즘
- 순열
- 동적프로그래밍
- kick start
- 코딩 테스트
Archives
- Today
- Total
오뚝이개발자
[Python] list와 tuple의 차이, 사전(dictionary)과 set자료형의 가능한 key값 본문
728x90
300x250
list와 tuple은 모두 순차자료형이다.
A = [1, 2, 3] # list
B = (1, 2, 3) # tuple
하지만 차이점은 리스트의 경우 원소를 바꿀 수 있으나(가변적), 튜플의 경우 원소의 값을 변경할 수 없다(불변적)는 점이다. 이 같은 차이가 왜 중요한 이유가 있다.
만약 아래와 같이 "리스트"를 key로 하는 딕셔너리를 만들고 싶다고 해보자.
A = [1,2,3]
B = [4,5,6]
dictionary = {}
dictionary[A] = 1
dictionary[B] = 2
안타깝지만, 위의 코드는 제대로 실행되지 않는다. 아마 실행해보면 TypeError: unhashable type: 'list'라는 에러 문구가 뜰 것이다. 이유는 파이썬에서 딕셔너리의 key값은 hash가 가능토록 설계되어야 하는데 리스트를 key로 하면 가변적인 자료형이 key가 되므로, hash key의 유일성을 해칠 수 있기 때문이다.
파이썬에선 set도 내부적으로 dictionary와 같이 hash를 통해 설계되어있어 set에도 마찬가지로 적용된다.
정리하자면, 딕셔너리 키 혹은 set의 원소가 될 수 있는 것들은 문자열, 숫자, 튜플 세 가지이다.
집합을 사용하는 다른 예를 들어보자. 만약 세 개의 수로 이루어진 순서쌍들을 중복없이 카운트한다고 해보자.
A = [[1,2,3], [1,2,3], [2,3,4]]
print(set(A)) # Error!!!
위처럼 리스트를 set의 원소로하면 앞에서 언급한 것과 마찬가지로 TypeError: unhashable type: 'list'라는 에러가 뜬다. 즉, 이 경우 아래와 같이 튜플로 바꾸어야 한다.
B = ((1,2,3), (1,2,3), (2,3,4))
print(set(B)) # ((1,2,3), (2,3,4))
728x90
300x250
'Language > 파이썬' 카테고리의 다른 글
[Python] assert, raise (0) | 2021.09.25 |
---|---|
[Python] 얕은 복사(shallow copy)와 깊은 복사(deep copy) (0) | 2021.04.12 |
[Python] deque 사용법 (0) | 2020.12.15 |
[Python] 파이썬 내장함수 시간복잡도 (0) | 2020.12.15 |
[Python] 파이썬 in 연산 시간복잡도 (0) | 2020.12.02 |
Comments