Python

파이썬에서 변수란? 초보자가 꼭 알아야 할 기본 개념 정리

코딩 코디네이터 2025. 4. 7. 09:05
반응형

파이썬에서 변수란? 초보자가 꼭 알아야 할 기본 개념 정리

파이썬 공부를 시작했는데 ‘변수’부터 헷갈린다면? 괜찮아요! 오늘 이 글로 완전히 정리됩니다.

 

 

안녕하세요, 개발 입문자 여러분 😊
프로그래밍을 배우다 보면 가장 먼저 만나는 개념 중 하나가 바로 "변수"입니다.

파이썬에서는 이 변수가 조금 특별한 방식으로 동작하죠.

"파이썬에서 변수는 값이 아니라 '객체를 가리킨다"는 말, 들어본 적 있으신가요?

이 글에서는 초보자도 부담 없이 이해할 수 있도록, 파이썬 변수의 개념을 차근차근 예제와 함께 설명드릴게요.

코딩을 처음 시작하셨거나, 변수 개념이 모호하셨다면 지금부터 꼭 집중해 주세요!

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)을 지원하는 언어이기 때문이에요.

파이썬의 변수 처리 과정 요약

  1. 값이 생성되면 파이썬은 객체(Object)를 메모리에 만들어요.
  2. 해당 객체는 id 값을 가지며, 메모리 주소로 관리됩니다.
  3. 변수는 그 객체를 참조(reference)하는 방식으로 연결돼요.
  4. 동일한 값을 갖는 객체는 재사용될 수도 있습니다 (특히 숫자형, 문자열 등 불변 객체의 경우).

예제: 객체 재사용 확인하기

a = 100
b = 100
print(id(a))
print(id(b))
print(a is b)  # True

위 코드를 보면 변수 ab에 같은 값을 할당했을 뿐인데,

id 값도 같고 a is bTrue를 반환하죠.

파이썬은 메모리 낭비를 줄이기 위해 동일한 불변 객체는 내부적으로 하나만 만들어 공유하게끔 설계되어 있습니다.

📌 '불변 객체'와 '가변 객체' 차이

불변 객체 (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

위 코드에서 ab같은 리스트 객체를 참조합니다.

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가 동일하지만, cd는 새로운 객체이기 때문에 ID가 달라요.

이 차이를 모르면, 복사한 리스트를 수정했을 때 원본까지 바뀌는 상황이 발생할 수 있어요!

is 연산자 vs == 연산자

연산자 의미 비교 대상
== 값(value)이 같은지 비교 내용
is 객체 ID(주소)가 같은지 비교 객체 자체

예제 확인!

x = [1, 2, 3]
y = [1, 2, 3]
print(x == y)  # True
print(x is y)  # False

리스트 xy는 내용은 같지만, 서로 다른 객체이기 때문에 isFalse를 반환합니다.

이처럼 파이썬에서는 변수와 객체의 연결 관계를 이해하는 게 아주 중요하죠!

 

 

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의 값을 바꾸자 bc도 같이 바뀌었죠?

그 이유는 얕은 복사는 내부 리스트까지는 복사하지 않기 때문이에요.

반면 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

👀 한눈에 보는 핵심 요약

  • 여러 변수에 한 번에 값 할당 가능 (튜플, 리스트 사용)
  • 변수 스왑도 한 줄로 가능
  • 함수에서 여러 값 반환하고 받기 쉽게 만들어줌

 

이제 튜플과 변수 다중 할당 문법까지 마스터하셨습니다!

여기까지 오셨다면 파이썬 변수에 대해 한층 깊이 있는 이해를 갖추셨다고 할 수 있어요 😊

 

변수는 프로그래밍의 뿌리와도 같은 개념입니다.

특히 파이썬은 다른 언어들과는 다르게 "값이 아닌 객체를 참조"하는 구조를 채택하고 있어서, 처음에는 다소 헷갈릴 수 있어요.

하지만 그 구조를 한 번 이해하고 나면 파이썬의 모든 데이터 처리 방식이 눈에 확 들어오기 시작합니다.

오늘 함께 알아본 내용들을 실제 코드에 적용해 보면서 연습해 보세요.

변수의 선언, 할당, 복사, 참조 구조 등을 눈으로 보고 손으로 코딩해보는 경험은 지식보다 훨씬 오래 남습니다.😉

"변수를 이해한다는 건, 곧 파이썬이라는 언어를 깊이 이해하는 첫걸음"이라는 점, 꼭 기억해 주세요!

반응형