Python - Set vs Dictionary / List vs Tuple

full_accel·2020년 11월 20일
0
post-thumbnail

파이썬의 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의 더하기
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: 3240720786368
# after: 3240720387904
  • 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은 가능 / list는 불가
  • set은 가변(mutable)하다.
profile
스스로 배운 것이 오래 간다.

0개의 댓글