파이썬에서 변수란? 초보자가 꼭 알아야 할 기본 개념 정리
파이썬에서 변수란? 초보자가 꼭 알아야 할 기본 개념 정리
파이썬 공부를 시작했는데 ‘변수’부터 헷갈린다면? 괜찮아요! 오늘 이 글로 완전히 정리됩니다.
안녕하세요, 개발 입문자 여러분 😊
프로그래밍을 배우다 보면 가장 먼저 만나는 개념 중 하나가 바로 "변수"입니다.
파이썬에서는 이 변수가 조금 특별한 방식으로 동작하죠.
"파이썬에서 변수는 값이 아니라 '객체를 가리킨다"는 말, 들어본 적 있으신가요?
이 글에서는 초보자도 부담 없이 이해할 수 있도록, 파이썬 변수의 개념을 차근차근 예제와 함께 설명드릴게요.
코딩을 처음 시작하셨거나, 변수 개념이 모호하셨다면 지금부터 꼭 집중해 주세요!
목차
1. 변수란 무엇인가요? 🧠
변수(variable)는 프로그래밍에서 데이터를 담는 그릇이라고 할 수 있습니다.
쉽게 말해, 어떤 값을 저장해 두었다가 나중에 다시 꺼내 쓸 수 있게 해주는 도구죠.
예를 들어,
숫자 3을 저장해두고 계속 계산에 써야 할 때, 이 숫자를 변수에 넣어두면 편리하게 사용할 수 있어요.
하지만!
파이썬에서 변수는 단순히 값을 저장하는 것이 아니라, '객체를 가리키는 포인터' 역할을 합니다.
이 점이 C나 Java 같은 언어와 가장 큰 차이점 중 하나예요.
파이썬 변수의 개념 핵심 요약
- 변수는 메모리 상의 객체를 가리키는 이름표이다.
- 변수에는 값이 직접 저장되지 않고, 객체의 주소(ID)만 저장된다.
-
id()
함수를 이용하면, 어떤 객체를 가리키고 있는지 확인할 수 있다.
예제: 변수와 객체의 관계
a = [1, 2, 3]
b = a
print(id(a))
print(id(b))
위 예제에서 a
는 리스트 [1, 2, 3]
을 가리키고, b = a
를 통해 b
도 같은 리스트를 가리키게 됩니다.
id()
함수를 이용해 둘의 주소를 출력하면 같은 값이 출력돼요.
즉, 같은 객체를 공유하고 있다는 뜻이죠!
💡 왜 이걸 알아야 할까요?
리스트나 딕셔너리처럼 가변 객체를 변수에 할당하고, 복사할 때 주의하지 않으면 원치 않는 결과를 초래할 수 있습니다.
이 구조를 이해하면 앞으로 코드를 짤 때 훨씬 수월해져요.
항목 | 설명 |
---|---|
변수 | 객체의 주소(ID)를 저장하는 이름표 |
객체 | 실제 데이터 값 (예: 숫자, 문자열, 리스트 등) |
id() | 변수가 가리키는 객체의 메모리 주소 반환 함수 |
이제 변수는 단순히 값을 넣는 그릇이 아니라, 객체를 가리키는 개념이라는 사실을 확실히 이해하셨죠? 😊
다음 파트에서는 파이썬 변수의 작동 방식과 동작 원리에 대해 더 깊이 파고들어 볼게요.
2. 파이썬 변수의 작동 방식 🔍
변수에 대한 개념을 이해했다면 이제 궁금해지죠.
파이썬은 내부적으로 변수를 어떻게 처리할까?
자바나 C언어에서는 변수를 선언할 때 데이터 타입도 함께 지정해야 합니다.
하지만 파이썬은 그럴 필요가 없죠.
왜냐하면 파이썬은 동적 타이핑(dynamic typing)을 지원하는 언어이기 때문이에요.
파이썬의 변수 처리 과정 요약
- 값이 생성되면 파이썬은 객체(Object)를 메모리에 만들어요.
- 해당 객체는
id
값을 가지며, 메모리 주소로 관리됩니다. - 변수는 그 객체를 참조(reference)하는 방식으로 연결돼요.
- 동일한 값을 갖는 객체는 재사용될 수도 있습니다 (특히 숫자형, 문자열 등 불변 객체의 경우).
예제: 객체 재사용 확인하기
a = 100
b = 100
print(id(a))
print(id(b))
print(a is b) # True
위 코드를 보면 변수 a
와 b
에 같은 값을 할당했을 뿐인데,
id
값도 같고 a is b
도 True
를 반환하죠.
파이썬은 메모리 낭비를 줄이기 위해 동일한 불변 객체는 내부적으로 하나만 만들어 공유하게끔 설계되어 있습니다.
📌 '불변 객체'와 '가변 객체' 차이
불변 객체 (Immutable) | 가변 객체 (Mutable) |
---|---|
정수(int), 실수(float), 문자열(str), 튜플(tuple) | 리스트(list), 딕셔너리(dict), 집합(set) |
값 변경 불가 | 값 변경 가능 |
객체 자체가 바뀌면 새로운 주소 | 객체 주소는 동일하지만 내부 값이 바뀜 |
🧠 꼭 기억하세요!
파이썬에서 변수는 객체를 가리키는 역할을 하기 때문에, 객체의 특성(가변/불변)에 따라 변수 간의 관계도 달라져요.
이런 개념을 알고 있으면 버그도 줄고, 코드를 이해하는 속도도 훨씬 빨라진답니다.
3. 변수 선언과 할당 방법 ✏️
파이썬에서 변수를 선언하는 방식은 기본에 충실하면서도 매우 간단합니다.
다른 컴파일 언어와 같이 복잡한 자료형 지정도 필요 없고, var
같은 키워드도 필요 없어요.
그냥 변수이름 = 값
형태로 작성하면 끝이에요!
기본 변수 할당 방식
x = 10
name = "Alice"
is_happy = True
위처럼 =
기호를 사용해 값을 대입하면, 해당 값에 맞는 자료형이 자동으로 결정돼요.
정수는 int
, 문자열은 str
, 논리값은 bool
처럼 말이죠.
동시에 여러 변수 선언하기
a, b, c = 1, 2, 3
파이썬에서는 여러 개의 변수를 한 줄에 동시에 선언할 수도 있어요.
위 예제에서 a = 1
, b = 2
, c = 3
이 동시에 실행됩니다. 아주 유용한 문법이에요!
같은 값을 여러 변수에 할당하기
x = y = z = 100
이 코드는 x
, y
, z
라는 세 개의 변수가 모두 100이라는 같은 객체를 참조하게 만들어 줍니다.
실제로 id(x)
, id(y)
, id(z)
를 출력해보면 모두 같은 값이 나올 거예요.
변수 이름 규칙 꼭 기억하세요!
- 알파벳, 숫자, 밑줄(
_
)만 사용할 수 있어요. - 숫자로 시작하면 안 됩니다. 예:
123abc
❌ - 예약어는 변수명으로 사용 불가! (예:
class
,def
,if
등)
👀 팁 하나!
파이썬에서 변수 이름을 지을 땐 snake_case를 쓰는 것이 보통입니다.
예: user_name
, total_price
처럼요.
가독성도 좋고, 커뮤니티에서도 널리 사용되죠.
4. 변수와 객체 ID의 관계 🔗
파이썬 변수의 가장 중요한 특징 중 하나는 객체의 주소(ID)를 참조한다는 점이에요.
즉, 변수는 데이터를 직접 저장하는 것이 아니라, 메모리 어딘가에 저장된 객체를 가리키고 있을 뿐이죠.
id() 함수로 객체 확인하기
a = [1, 2, 3]
b = a
print(id(a))
print(id(b))
print(a is b) # True
위 코드에서 a
와 b
는 같은 리스트 객체를 참조합니다.
id()
함수는 메모리 상에서 객체가 실제로 어디에 저장되어 있는지를 알려주는 도구예요.
두 값이 같다면, 두 변수는 같은 객체를 가리키고 있다는 의미랍니다.
🔄 리스트 복사와 ID
리스트를 복사할 때는 얕은 복사(shallow copy)와 깊은 복사(deep copy)를 구분해야 해요.
다음 예제를 살펴볼게요.
a = [1, 2, 3]
b = a # 같은 객체
c = a[:] # 새로운 객체 (얕은 복사)
import copy
d = copy.deepcopy(a) # 새로운 객체 (깊은 복사)
print(id(a), id(b)) # 동일
print(id(a), id(c)) # 다름
print(id(a), id(d)) # 다름
b = a
는 같은 객체를 가리키고 있어서 ID가 동일하지만, c
와 d
는 새로운 객체이기 때문에 ID가 달라요.
이 차이를 모르면, 복사한 리스트를 수정했을 때 원본까지 바뀌는 상황이 발생할 수 있어요!
is 연산자 vs == 연산자
연산자 | 의미 | 비교 대상 |
---|---|---|
== |
값(value)이 같은지 비교 | 내용 |
is |
객체 ID(주소)가 같은지 비교 | 객체 자체 |
예제 확인!
x = [1, 2, 3]
y = [1, 2, 3]
print(x == y) # True
print(x is y) # False
리스트 x
와 y
는 내용은 같지만, 서로 다른 객체이기 때문에 is
는 False
를 반환합니다.
이처럼 파이썬에서는 변수와 객체의 연결 관계를 이해하는 게 아주 중요하죠!
5. 변수 복사 개념 이해하기 📦
변수 복사는 파이썬 초보자에게 가장 혼란스러운 개념 중 하나예요.
"복사했는데 원본까지 바뀌는 거 뭐야?"라는 말, 한 번쯤 해보셨죠? 😅
그 이유는 바로 파이썬 변수는 객체의 참조(주소)를 복사하기 때문이에요.
변수 복사의 종류
종류 | 설명 | 특징 |
---|---|---|
할당 (=) | 주소(참조)를 복사 | 같은 객체를 가리킴 |
얕은 복사 | 객체 복사, 내부 참조는 공유 | 1단계만 복사 |
깊은 복사 | 전체 구조 복사 (내부 객체까지) | 완전히 독립된 객체 |
예제: 얕은 복사와 깊은 복사의 차이
import copy
a = [[1, 2], [3, 4]]
b = a # 참조 복사
c = a[:] # 얕은 복사
d = copy.deepcopy(a) # 깊은 복사
a[0][0] = 100
print(b) # [[100, 2], [3, 4]]
print(c) # [[100, 2], [3, 4]]
print(d) # [[1, 2], [3, 4]]
놀랍게도 a
의 값을 바꾸자 b
와 c
도 같이 바뀌었죠?
그 이유는 얕은 복사는 내부 리스트까지는 복사하지 않기 때문이에요.
반면 d
는 완전히 독립된 객체이기 때문에 변하지 않았어요.
🚨 잠깐! 이런 실수 조심하세요
- 단순히
=
로 복사하면 원본과 연결된 상태가 된다. - 리스트 안에 리스트(중첩 구조)일 때는 얕은 복사도 위험할 수 있다.
이런 개념을 이해하고 있어야 리스트나 딕셔너리를 다룰 때 예상치 못한 오류를 방지할 수 있어요.
특히 함수 인자로 리스트를 넘길 때 이런 문제가 자주 발생하니 꼭 기억해두세요!
6. 튜플, 여러 변수 할당까지 한 번에 정리 ✅
파이썬에서는 한 번에 여러 변수에 값을 할당하는 기능이 아주 강력하고 편리합니다.
특히 튜플(tuple)과 함께 쓰면 더욱 직관적이죠.
이건 실제로도 아주 많이 쓰이는 문법이에요!
튜플을 활용한 다중 할당
x, y = (10, 20)
print(x) # 10
print(y) # 20
위 코드는 사실상 x, y = 10, 20
과 같은 의미입니다.
파이썬에서는 괄호를 생략해도 자동으로 튜플로 인식해요.
이걸 packing/unpacking이라고 합니다.
변수 값 맞바꾸기 (swap)
a = 1
b = 2
a, b = b, a
print(a, b) # 2 1
놀랍게도 temp
변수를 사용하지 않고도 두 변수의 값을 한 줄로 교환할 수 있습니다.
이건 다른 언어에선 찾아보기 힘든 파이썬만의 유니크한 매력 포인트예요!
📦 packing과 unpacking 이해하기
packing은 여러 값을 하나의 변수에 묶는 것이고,
unpacking은 그 값을 여러 변수에 풀어주는 거예요.
# Packing
data = (1, 2, 3)
# Unpacking
x, y, z = data
이 문법을 알면 함수에서 여러 값을 리턴하고, 받는 쪽에서 나눠 받기도 쉬워집니다.
아래 예제를 볼까요?
def get_user():
return "Alice", 25
name, age = get_user()
print(name) # Alice
print(age) # 25
👀 한눈에 보는 핵심 요약
- 여러 변수에 한 번에 값 할당 가능 (튜플, 리스트 사용)
- 변수 스왑도 한 줄로 가능
- 함수에서 여러 값 반환하고 받기 쉽게 만들어줌
이제 튜플과 변수 다중 할당 문법까지 마스터하셨습니다!
여기까지 오셨다면 파이썬 변수에 대해 한층 깊이 있는 이해를 갖추셨다고 할 수 있어요 😊
변수는 프로그래밍의 뿌리와도 같은 개념입니다.
특히 파이썬은 다른 언어들과는 다르게 "값이 아닌 객체를 참조"하는 구조를 채택하고 있어서, 처음에는 다소 헷갈릴 수 있어요.
하지만 그 구조를 한 번 이해하고 나면 파이썬의 모든 데이터 처리 방식이 눈에 확 들어오기 시작합니다.
오늘 함께 알아본 내용들을 실제 코드에 적용해 보면서 연습해 보세요.
변수의 선언, 할당, 복사, 참조 구조 등을 눈으로 보고 손으로 코딩해보는 경험은 지식보다 훨씬 오래 남습니다.😉
"변수를 이해한다는 건, 곧 파이썬이라는 언어를 깊이 이해하는 첫걸음"이라는 점, 꼭 기억해 주세요!