오뚝이개발자

[Python] list와 tuple의 차이, 사전(dictionary)과 set자료형의 가능한 key값 본문

Language/파이썬

[Python] list와 tuple의 차이, 사전(dictionary)과 set자료형의 가능한 key값

땅어 2021. 1. 11. 21:05
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
Comments