(Python)tuple과 map함수

실험하는 코더·2024년 6월 30일

python 입문

목록 보기
6/7

튜플에 대해서 공부하던 중 파이썬은 쉼표를 튜플 생성자로 사용하여 소괄호를 생략해도 된다는 내용을 보았습니다.

그럼 과연 map함수로 받아오는 인자는 튜플 형식인가??라는 궁금증도 생기더군요
또, 튜플에서 변경 불가능한 경우가 어떤 것인지 알아봅시다.
또 필요 이상의 실험이 있을 예정이니 원하시는 내용은 아래의 결론파트로 넘어가서 필요한 내용만 스윽 가져가시길 바라겠습니다.

오늘도 간단한 정의부터 시작할게요

정의

tuple()이란?

  • 시퀀스 자료형 중 하나로, 요소를 변경할 수 없는 자료형입니다.
  • 튜플을 정의할 때에는 요소가 한개면 그냥 괄호만 적지말고 콤마를 붙여서 정의해야합니다.
a = (1,)
b= (1,2)

Test

test 1. 변수에 할당하는 값을 튜플 형태로 적으면 변경가능한가?

q,w = (10,20)
print(type(q)) # int
q = 20
print(q) # 20

test 2. 튜플 형태의 자료에서 추출한 데이터는 변경가능한가?

tuple_test = (10,20)
x= tuple_test[0]
print(type(x))
x=20
print(x)

test 3. map에서 할당한 변수의 값은 변경가능한가?

a = '10 20'
x,y=  map(int, a.split())
print(type(x)) # int
x= 20
print(x) # 20

변수에 값을 할당할 경우, 기존의 변수가 입력되어있기 때문에 새로 주소를 입히는 구조여서 test 1,2,3모두 값이 변화가 가능하다는 결론입니다.
물론 이제는 공부를 한지 일주일이라는 시간이 흘러서 이미 내용을 알고 있지만 그냥 아는거와 체득을 한것은 큰 차이가 있잖아요?(지금은 무려 5개월이 지났네요...ㅎ)
전 이런 과정이 재밌습니다.ㅎ

이제는 본격적으로 map함수에 대한 실험을 진행해보고자 합니다.

test 4. map의 인덱스 호출

a = '10 20'
x= map(int, a.split())
q= x[0] # TypeError: 'map' object is not subscriptable
w =x[1]
print(q)
print(type(q))

map object은 하나의 묶음 같은 것이지 시퀀스 형식의 자료형태가 아니기 때문에 인덱스를 이용한 호출이 불가능한 것 같습니다.
학습을 통해 map은 하나의 class라는 것을 알게 되었습니다. 따라서 tuple과 같은 시퀀스랑은 아예 다른 것이죠

test 5. map의 할당

a = '10 20'
x= map(int, a.split())
print(type(x)) #<class 'map'>
q,w =x
print(q) # 10

하지만 test 5에서 보신것과 같이 map함수의 값을 변수에 할당하여 값을 다시 부여할 수 있다는 점!
일반적으로 이런 형식으로 사용하기 보다는 test 3과 같이 값을 뽑거나 리스트 형태로 뽑는 문제가 더 많더군요

test 6. map의 변수할당 실험2

a = '10 20 30'
x = map(int, a.split())
q,w = x #ValueError: too many values to unpack (expected 2)
print(a) 
e = x
print(e)

map object인 x에서 print(next(x))를 통해 원하는 결과값을 계속 뽑아낼수 있는 글을 보고 실험해본 결과입니다.
map object는 값의 갯수와 변수의 갯수가 맞지 않으면 에러가 발생하네요

결론

  1. tuple은 변경 불가능한 순서가 저장된 시퀀스타입의 자료형이다.
  2. tuple의 요소를 새로운 변수에 할당하면 변수의 값은 수정이 가능하다.
  3. map함수는 시퀀스형 자료가 아닌 map이라는 새로운 객체를 형성한다.
  4. map함수의 데이터 추출 시 시퀀스 형식으로 변환하여 사용할 수 있지만 변수에 직접 할당할 경우, 결과 값의 갯수에 맞게 변수를 준비해야한다.

이 글을 작성한지 거의 6개월이 지났는데 파이썬은 확실히 다른 언어에 비해 편한것 같아요 이제는 파이썬으로 인사이트를 얻는게 많이 없지만 밀린 글들을 마무리하면서 또 새로운 내용들로 찾아뵙도록 하겠습니다.

profile
노베이스의 기록

0개의 댓글