본문 바로가기

코테문제

[코테] 기본 CS 및 replace() 헷갈림

 

https://school.programmers.co.kr/learn/courses/30/lessons/120894

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

def solution(numbers):
    d = {
        "zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9
    }
    for x in d:
        numbers = numbers.replace(x, str(d[x]))
    return int(numbers)
    # replace는 변경된 새 문자열 반환함.
    # 함수의 매개변수(지역변수) numbers는 for문을 반복하며 추적 불가능한 상태의 문자열이 발생함.

 

 

 

 

🔸 함수 호출 시점

python
복사편집
def example(x): ... example(10)
  • x = 10이 전달되면, x는 정수 10을 가리키는 지역 변수가 돼.
  • int는 불변 객체니까, 값 변경은 새 객체 생성과 동일한 의미야.

🔸 x = x + 1의 내부 동작

이건 다음과 같이 해석돼:

python
복사편집
1. x가 가리키는 객체 → 정수 10 (불변) 2. x + 111이라는 **새로운 정수 객체** 생성 3. x = ... → x는 이제 11이라는 새 객체를 **가리키도록 업데이트**

→ 즉, x가 같은 이름을 유지하면서 다른 메모리 주소를 가리키게 된 것이야.

 

🧪 확인해보자 (id로 주소 비교)

python
복사편집
def example(x): print("처음:", x, id(x)) for _ in range(3): x = x + 1 print("변경됨:", x, id(x)) example(10)

출력 예:

makefile
복사편집
처음: 10 140732396020880 변경됨: 11 140732396020912 변경됨: 12 140732396020944 변경됨: 13 140732396020976

→ id(x)는 매번 바뀌는 걸 볼 수 있어.
즉, 값이 변경된 게 아니라, 새로운 객체를 매번 새로 가리키고 있는 것.

 

 

문자열 numbers에 재할당이 반복되면, 이전 문자열 객체는 **"도달 불가능한 상태"**가 되고,
파이썬은 이를 자동으로 감지해서 메모리에서 회수해.
이게 바로 파이썬의 참조 기반 메모리 관리와 **가비지 컬렉션(GC)**의 핵심이야.

 

🔄 이 고아 객체는 어떻게 처리될까?

상태설명
참조 횟수 0 아무 변수도 이 객체를 가리키지 않음
GC 대상 파이썬의 가비지 컬렉터가 주기적으로 체크해서 메모리에서 제거

'코테문제' 카테고리의 다른 글

[코테] 코드 스타일 가이드  (0) 2025.04.25
[코테] 문자열 뒤집기  (0) 2025.04.24
[백준] B13022 수정  (0) 2024.01.27
[백준] B1978  (0) 2024.01.25
[백준] S25418  (0) 2024.01.25