<오늘 한 일>
- 알고리즘 문제 풀이(feat. mutable, immutable)
def solution(num_list, n):
answer = []
cnt = 0
temp = []
x = []
for num in num_list:
temp.append(num)
cnt += 1
if cnt == n:
answer.append(temp)
temp = []
cnt = 0
return answer
- 여기서 answer에 temp를 붙인 후에 temp를 빈 리스트로 초기화하지 않으면 어떻게 될까? 가 우리끼리 토론의 주제였다(난 저녁을 늦게 먹어서 이 토론에 길게 참여한 건 아니지만...)
- 답을 예상을 하기로는 [[1,2], [1,2,3,4], [1,2,3,4,5,6],[1,2,3,4,5,6,7,8]] 이거였다
- 근데 코드를 실행하니까 [[1,2,3,4,5,6,7,8], [1,2,3,4,5,6,7,8], [1,2,3,4,5,6,7,8], [1,2,3,4,5,6,7,8]] 이렇게 나오는거다
- 나는 10~15분 고민했지만 팀원들은 내가 저녁 먹으러 갔을 때부터 꼬박 1시간을 고민했다고 한다
- 결국 왜 저렇게 나오는 건지 답을 찾지 못해서 다같이 튜터님께 질문하러 갔다
- 답은 mutable(변하기 쉬운)과 immutable(변하지 않는)이었다
구분 |
자료형 |
mutable |
list, dictionary |
immutable |
int, float, string, tuple |
- 이전에 튜터님이 이거에 대해 말씀해 주셨는데 나는 메모를 고작...값 복사 기능만 해서 ㅋㅋㅋ
- 이게 왜 중요한지 그땐 몰랐다..
- 리스트랑 딕셔너리는 값을 추가하거나 빼더라도 메모리 주소가 변하지 않는다(근데 왜 mutable인걸까 헷갈리게..뭐 메모리 주소가 아니라 값이 변한다에 초점이 맞춰진 거겠지..)
- int, float, string, tuple 은 처음에 값이 선언되면 그 메모리 주소에 담긴 값이 변하지 않는다 같은 변수에 값을 추가하거나 빼면 변수1과 변수2의 메모리 주소는 다르다
str1 = "abc"
print(id(str1), str1) # 140725985877568 abc
str1 = str1 + "def"
print(id(str1), str1) # 2172518454320 abcdef
list1 = [1,2,3]
print(id(list1), list1) # 1743953842304 [1, 2, 3]
list2 = list1
list2.append(4)
print(id(list1), list1) # 1743953842304 [1, 2, 3, 4]
print(id(list2), list2) # 1743953842304 [1, 2, 3, 4]
- str1은 str1 같은 변수에 값을 추가했더니 메모리주소가 바뀌었다
- 첫 번째 str1과 두 번째 str1은 변수명은 같지만 메모리주소가 다르다
- string type은 한 메모리 주소에는 하나의 값만 저장되는 immutable한 특성을 가지고 있기 때문이다
- 반면 list1과 list2는 같은 메모리 주소를 가진다 list2 = list1은 단순히 list1의 값만 list2에 대입한 게 아니라 list1의 메모리 주소가 list2에 들어간 것이다
- list type은 한 메모리 주소의 값이 변경될 수 있는 특성이 있기 때문에 list2에 4를 append 했지만 같은 메모리 주소를 가지고 있는 변수 list1의 값이 변경된 것이다
list1 = [1,2,3]
list2 = list1[:]
print(id(list1), list1) # 2443517139904 [1, 2, 3]
print(id(list2), list2) # 2443517280512 [1, 2, 3]
- 리스트에 값만 복사하는 기능인 [:]을 쓰면 같은 값을 가지고 있음에도 메모리 주소가 다른 별개의 리스트가 생성된 것을 확인할 수 있다
- 후발대 강의
<느낀 점>
- 오늘 후발대 강의 3강을 다 듣는 게 목표였는데 정리를 하면서 하다보니 1강도 다 못 들었다...
- 조금 듣고 정리하고 조금 듣고 정리하는 방식은 비효율적인 것 같다
- 내일은 강의를 하나 쭉 듣고 정리하는 방향으로 공부를 해봐야겠다
- 알고리즘 문제를 팀원들과 같이 각자 푼 방식에 대해 이야기를 나누다 보니 새로운 것도 알게 되고 새로운 시각도 접하게 돼서 좋은 것 같다
- 아 그리고 정리는 안 했지만 오늘 알고리즘 문제 풀이, 후발대 강의 말고도 팀원들과 개인과제 코드 리뷰 하는 시간도 가졌다 각자 자기가 쓴 코드를 설명하면서 이야기를 나눴다 다음에는 이런 것도 정리하면 좋을 것 같다
<내일 목표>
- 후발대 강의 다 듣기(2,3강)
- AWS 강의 듣기
- 알고리즘 문제 풀기(2문제..!!)