Python 기본 자료구조 - list, tuple, set, dictionary
List와 Tuple
List와 Tuple의 공통점
- 다른 type의 데이터를 담을 수 있다.
["string", 1, 2]
("string", 1, 2)
- 여러 데이터를 담을 수 있다.
- iterable(반복문으로 요소를 하나하나 꺼내 돌리기 가능)하다.
- 순서(idx)가 있다.
리스트 + 리스트
,튜플 + 튜플
은 되지만,리스트 - 리스트
,튜플 - 튜플
은 안된다
List와 Tuple의 차이점
- list는
[]
로 값들을 둘러싸지만 tuple은()
로 값들을 둘러싼다. - list는 mutable(가변)하지만, tuple은 immutable(불변)하다.
- list는
list.append()
,list.remove()
등의 방법으로 해당 list 자체의 값을 수정할 수 있다. - 반면, tuple은 list와 같은
append()
,remove()
로 수정할 수는 없다. - 다만 다음과 같은 트릭으로 수정된 효과를 낼 수 있음
- tuple의 값을 새로운 list에 복사하고 수정한 뒤 새로운 tuple에 list의 값을 할당 <- 결국 list에서 한거
- 또한 tuple 끼리 더하기(
+
, concaternation)는 가능 ⇒ append와 유사
- list는
mutable(가변) vs immutable(불변)
- list, set, dict 은 mutable vs tuple은 immutable
- mutable은 값이 변한다는 뜻이고, immutable은 값이 변하지 않는다는 의미
- list => mutable
- dictioary => mutable
- tuple => immutable
Tuple은 immutable(불변)이라며? tuple 끼리 더하기는 왜 됨?
- 일단 immutable이라
append()
,remove()
메소드가 없다는 것을 다시한번 생각하자. - 더하기가 된 것처럼 보이나 실제로 tuple이 수정된 건 아님
# list의 더하기
list_a = [1, 2, 3]
list_b = [4, 5, 6]
print("before:", id(list_a))
list_a += list_b
print("after:", id(list_a))
# 결과
before: 140718837238112
after : 140718837238112
- list에
+
연산을 해도 위와 같이list_a
의 id(메모리 주소) 값은 동일하다. 즉, 동일한 메모리 공간에 담겨 있다.- id() 함수를 이용해서 변수의 메모리 주소를 확인할 수 있다.
# tuple의 더하기
tuple_a = (1, 2, 3)
tuple_b = (4, 5, 6)
print("before:", id(tuple_a))
tuple_a += tuple_b
print("after:", id(tuple_a))
# 결과
# before: 2852015629312
# after : 2852015230784
- 반면 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은 가능
- key값으로 list는 불가 => list는 mutable이기 때문에
- set은 가변(mutable)하다.
References
- 참고 링크 : https://velog.io/@full_accel/Python-Set-Dictionary-List-Tuple
- mutable과 immutable : https://ledgku.tistory.com/54
Author And Source
이 문제에 관하여(Python 기본 자료구조 - list, tuple, set, dictionary), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@oneofakindscene/Python-기본-자료구조-list-tuple-set-dictionary저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)