파이썬의 set과 dictionary의 차이 그리고 list와 tuple의 차이에 대한 간단한 포스팅입니다.
List vs Tuple

List와 Tuple의 공통점
- 다른 type의 데이터를 담을 수 있다.
["string", 1, 2,]
("string", 1, 2)
- 여러 데이터를 담을 수 있다.
- iterable(반복문으로 요소를 하나하나 꺼내 돌리기 가능)하다.
- 순서가 있다.
list와 Tuple의 차이점
- list는
[]
로 값들을 둘러싸지만 tuple은 ()
로 값들을 둘러싼다.
- list는 mutable(가변)하지만, tuple은 immutable(불변)하다.
- list는
list.append()
, list.remove()
등의 방법으로 해당 list 자체의 값을 수정할 수 있다.
- 반면, tuple은 list 처럼 수정할 수는 없다.
- 다만 다음과 같은 트릭으로 수정된 효과를 낼 수 있음
- tuple의 값을 새로운 list에 복사하고 수정한 뒤 새로운 tuple에 list의 값을 할당
- 또한 tuple 끼리 더하기(
+
, concaternation)는 가능
Tuple은 immutable(불변)이라며? tuple 끼리 더하기는 왜 됨?

- 더하기가 된 것처럼 보이나 실제로 tuple이 수정된 건 아님
list_a = [1, 2, 3]
list_b = [4, 5, 6]
print("before:", id(list_a))
list_a += list_b
print("after:", id(list_a))
- list에
+
연산을 해도 위와 같이 list_a
의 id(메모리 주소) 값은 동일하다. 즉, 동일한 메모리 공간에 담겨 있다.
- id() 함수를 이용해서 변수의 메모리 주소를 확인할 수 있다.
tuple_a = (1, 2, 3)
tuple_b = (4, 5, 6)
print("before:", id(tuple_a))
tuple_a += tuple_b
print("after:", id(tuple_a))
- 반면 tuple의 경우
+
연산 전후의 tuple_a
의 메모리(id 값) 주소가 다르다.
- 즉, 파이썬 할애비가 와도 tuple 자체를 수정할 수는 없으므로 tuple에
+
연산을 하면
- 파이썬이 새로운 메모리 공간에 tuple을 만들면서
- 새로운 tuple에 더해지는 tuple들의 요소를 담은 뒤
- 거기에 기존의 tuple 변수 이름을 붙여준 것이다.
- 결과적으로 tuple은
+
연산으로 인해 수정(mutable)된 것이 아니라, 편의를 위해 수정된 것 처럼 보인 것일 뿐, 본질적으로는 불변(immutable)하다.
왜 굳이 분리했나?
- tuple로 선언해 놓으면 개발자가 의도치 않은 값의 수정을 막을 수 있다!
- 돌다리가 옆에 있는데 왜 굳이 흔들다리를 건너야 겠는가?
Set vs Dictionary

Set과 Dictionary의 공통점
- 중복이 불가능한 collection 자료형이다.
Set과 Dictionary의 차이점
- set은 key값만 존재한다.
- dictionary는 key값으로 value값을 찾아내는 해시테이블(Hash Table) 구조이다.
- dictionary는 key값은 immutalbe 형식이어야하고, value값은 mutable 형식이여도 된다.
- key값으로 string, tuple은 가능 / list는 불가
- set은 가변(mutable)하다.