본문 바로가기

내일 배움 캠프/TIL

TIL) 8주차 1일

어느덧 8주차가 되었다.

 

이렇게 코딩에 몰두할 시간을 가진적은

 

거의 없었는데 점점 재밌어지는거 같다ㅎㅎ

 

오늘도 화이팅!


mutable? immutable?

프로그래머스 - 2차원으로 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/120842

 

문제 자체는 어렵지 않았다. n번만큼 num_list를 쪼개서 다른 빈 리스트에 넣어주는 형식으로 해주면 쉽게 풀 수 있는 문제인데, 여기서 중요한점은 for문이 돌아간 뒤 빈리스트로 초기화를 시켜주어야 한다는 점이다. 코드는 아래와 같다.

def solution(n_list, n):
  temp = []
  answer = []
  a = 0
  num = 0
  while (a < len(n_list)//n):
    for i in range(1, n+1):
      temp.append(n_list[num])
      num += 1
    a += 1
    answer.append(temp)
    temp=[]
  return answer
  
# 예시
a = solution([1, 2, 3, 4, 5, 6, 7, 8], 2)
print(a)

 

여기서 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]]

 

어째서 이런식으로 나오는것일까?

해답은 'mutable' 과 'immutable' 에 있었다. 

먼저 mutable과 immutable의 차이점을 알아보자.

  • mutable : dict, list → mutable한 객체는 다른객체가 그 객체를 불러올때 같은 주소를 가리키기 때문에 때문에 값이 바뀔수있다.
  • immutable : str, int, float, bool, tuple → mutable한 객체는 다른객체가 그 객체를 불러올때 다른 주소에 저장하기 때문에 값이 바뀔 걱정은 없다

 

값이 예상과 달리 나온점이 mutable한 객체인 temp를 answer가 append로 받아오기 때문에 결국 같은 주소를 가리키게 됨으로 결국 마지막 temp값에 따라 그전에 받은 값들도 변경되는 것이였다!

 

특강시간때 튜터님이 지나가는 말로 반드시  mutable과 immutable로 문제가 생길 수 있다고 하셨는데 직접 겪어보니 생각해내기 쉽지 않았다.. 


 

'내일 배움 캠프 > TIL' 카테고리의 다른 글

TIL) 8주차 4일  (0) 2023.05.07
TIL) 8주차 3일  (0) 2023.05.04
TIL) 7주차 5일  (0) 2023.05.02
TIL) 7주차 4일  (0) 2023.05.01
TIL) 7주차 3일  (0) 2023.04.27