오늘은 파이썬의 기본 데이터 타입과 제어 흐름에 대해 배웠다.
파이썬에서 모든 값은 객체다.
def get_user_info():
name = "홍길동"
age = 30
city = "서울"
return name, age, city
print(type(get_user_info())) # <class 'tuple'>
zip(iterable1, iterable2, ...)
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.
zip()은 결과를 미리 만들지 않고, 나중에 값을 꺼낼 수 있는 객체를 반환한다. for문이나 list() 등으로 순회할 때가 되어야 한 쌍씩 계산한다. 결과 전체를 메모리에 올리지 않기 때문에 대규모 데이터를 순회할 때 유리하다.

A set object is an unordered collection of distinct hashable objects.
set은 내부에서 해시 테이블을 사용한다. 정수는 hash 값이 자기 자신이기 때문에 연속된 작은 정수는 해시 테이블에 연속적으로 채워져 마치 정렬된 것 같이 들어가 있다.
print(hash(1)) # 1
print(hash(2)) # 2
print(hash(3)) # 3
연속된 정수만으로 구성된 set에서 순서가 있어 보였던 것은 CPython의 해시 테이블 구현에 따른 우연한 결과이며, 다른 값을 추가하자 그 착시가 드러났다.

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