[TIL] Python - 데이터 구조 / 제어 흐름

한울·2025년 12월 30일

What I Learned

오늘은 파이썬의 기본 데이터 타입과 제어 흐름에 대해 배웠다.

Every value in Python is an object.

파이썬에서 모든 값은 객체다.

함수의 반환값은 언제나 객체 하나

def get_user_info():
    name = "홍길동"
    age = 30
    city = "서울"
    return name, age, city

print(type(get_user_info())) # <class 'tuple'>
  • 함수가 값을 반환할 때, 항상 객체 한 개를 반환한다.
  • 여러 값을 반환하는 것처럼 보여도, 실제로는 튜플 1개를 반환한다.

zip 함수

zip(iterable1, iterable2, ...)
  • 각 iterable에서 같은 위치의 값들을 하나의 튜플로 묶는다.
  • 결과는 zip 객체 (iterator)
names = ["Jake", "Amy", "Rosa"]
ages = [34, 32, 29]

ziped_info = zip(names, ages)

print(list(ziped_info))  # [('Jake', 34), ('Amy', 32), ('Rosa', 29)]
print(type(ziped_info))  # <class 'zip'>
  • 왜 결과가 바로 안 보일까?

    결과를 출력하기 위해 print문으로 감쌌지만 메모리 주소 같은 값이 나와서 당황했다.

print(zip(names, ages)) # <zip object at 0x1081402c0>

zip() is lazy: The elements won’t be processed until the iterable is iterated on, e.g. by a for loop or by wrapping in a list.

Python 공식 문서

zip()은 결과를 미리 만들지 않고, 나중에 값을 꺼낼 수 있는 객체를 반환한다. for문이나 list() 등으로 순회할 때가 되어야 한 쌍씩 계산한다. 결과 전체를 메모리에 올리지 않기 때문에 대규모 데이터를 순회할 때 유리하다.

set의 작동원리

  • 그전에 알기로 set은 순서를 보장하지 않는 자료구조였다. 그런데 오늘 for문으로 돌려보니 지정한 순서대로 출력이 돼서 이상했다.

A set object is an unordered collection of distinct hashable objects.

Python 공식 문서

set은 내부에서 해시 테이블을 사용한다. 정수는 hash 값이 자기 자신이기 때문에 연속된 작은 정수는 해시 테이블에 연속적으로 채워져 마치 정렬된 것 같이 들어가 있다.

print(hash(1)) # 1
print(hash(2)) # 2
print(hash(3)) # 3

연속된 정수만으로 구성된 set에서 순서가 있어 보였던 것은 CPython의 해시 테이블 구현에 따른 우연한 결과이며, 다른 값을 추가하자 그 착시가 드러났다.

느낀 점

주말 내내 꼬박 앓다 오랜만에 간 수업이라 놓친 부분이 많을까 걱정했다. 다행히 어제 하루 동안 환경 설정을 했다고 해서 오늘 수업을 따라가기 어렵진 않았다.
오늘 스터디 첫 날이었는데.. 난도 조절에 실패했다. 처음 운영해보는 거라 전혀 감이 오지 않은 상태에서 실제 시험보는 것처럼 1시간 동안 진행했는데, 체감 난도가 꽤 높았다. 다음 스터디는 난이도 조절해야 할 거 같다...

profile
데이터 공부

0개의 댓글