BioPlayground

🧬
목록으로

Python 변수와 메모리 참조

Python에서 변수가 실제로 어떻게 작동하는지, 메모리 참조의 개념을 이해합니다.

입문
|
6
|
검증 완료 (2026-07)
진행률0/7 (0%)

Python 변수와 메모리 참조

이 토픽을 마치면

Python에서 변수가 "값을 담는 상자"가 아니라 "객체를 가리키는 이름표"라는 것을 이해하게 됩니다.


변수는 상자가 아니다

많은 교재가 변수를 "값을 담는 상자"로 설명합니다. 하지만 Python에서는 틀린 비유입니다.

python
a = 10

이 코드는 "a라는 상자에 10을 넣는다"가 아닙니다. 정확히는:

  1. 메모리에 정수 객체 10이 만들어진다
  2. a라는 이름이 그 객체를 가리킨다 (참조)
python
a = 10
b = a # b도 같은 객체 10을 가리킨다
print(id(a)) # 4350114064
print(id(b)) # 4350114064 ← 같은 주소!
print(a is b) # True ← 같은 객체를 가리키고 있다

id()는 객체의 메모리 주소를 반환합니다. ab같은 주소를 가리키고 있습니다. 값을 복사한 게 아니라, 같은 객체에 이름표를 하나 더 붙인 것입니다.


재할당은 이름표를 옮기는 것

python
a = 10
b = a
a = 20 # a를 새 값에 연결
print(a) # 20
print(b) # 10 ← b는 여전히 원래 객체를 가리킨다

a = 20은 "a가 가리키는 객체를 20으로 바꾼다"가 아닙니다. 메모리에 새 객체 20이 만들어지고, a라는 이름표가 그쪽으로 옮겨간 것입니다. b는 여전히 원래 10을 가리킵니다.


== vs is

python
x = [1, 2, 3]
y = [1, 2, 3]
print(x == y) # True ← 값이 같다
print(x is y) # False ← 다른 객체다
z = x
print(x is z) # True ← 같은 객체를 가리킨다
연산자비교 대상의미
==내용이 같은가?
is정체같은 객체인가? (메모리 주소)

"같은 내용의 책 두 권"은 ==로는 True, is로는 False입니다. "같은 책 한 권을 두 명이 들고 있다"면 둘 다 True입니다.


데이터 타입과 변환

Python의 기본 데이터 타입:

python
# 숫자
integer = 42 # int (정수)
floating = 3.14 # float (실수)
# 문자열
text = "안녕하세요" # str
# 불리언
flag = True # bool (True/False)
# None — "값이 없음"을 나타내는 특별한 타입
result = None
# 타입 확인
print(type(42)) # <class 'int'>
print(type("hello")) # <class 'str'>

타입 변환

python
# 문자열 → 숫자
age = int("25") # 25
price = float("9.99") # 9.99
# 숫자 → 문자열
str(42) # "42"
# 주의: 변환 불가능하면 에러
int("hello") # ValueError!

이름 규칙

python
# 좋은 변수명 — 의미가 드러나는 이름
user_name = "김훈"
total_score = 95
is_active = True
# 나쁜 변수명
x = "김훈" # 무슨 값인지 알 수 없음
a1 = 95 # 의미 불명
# 규칙
# - 영문, 숫자, 밑줄(_) 사용 가능
# - 숫자로 시작 불가 (2name → 에러)
# - snake_case 권장 (Python 관례)
# - 예약어 사용 불가 (if, for, class 등)

Python에서는 camelCase보다 snake_case를 씁니다. userName 대신 user_name. 이것은 PEP 8(Python 공식 스타일 가이드)의 권장 사항입니다.