[ 데이터를 위한 Python : From Scratch to Master.] Python 문법 공부 _ 변수와 데이터 타입.

0
post-thumbnail

[데이터를 위한 Python : From Scratch to Master.] Python 문법 공부 _ 변수와 데이터 타입.

∇ Python 문법 공부 _ 변수와 데이터 타입.

목  차

0. 들어가며

1. 변수란 무엇인가? 정말로?

2. Python의 모든 것은 객체이다.

3. 동적 타이핑과 변수의 자유.

4. 데이터 타입 ( 기본형과 복잡형 )

5. 변수, 객체, 참조 

6. 타입 변환 ( Casting) 과 암묵적 형변환.

7. 불변(Immutable)과 가변(Mutable)

8. 타입 힌트 ( Type Hint )와 정적 검사

9. 내부 최적화와 인터닝(Interning)

10. 요약.

📘 0. 들어가며


  • Python을 처음 배울 때 가장 먼저 접하는 문법은 아마 변수에 값을 대입하는 것!!
x = 10
  • 이렇게 간단한 한 줄이 Python의 모든 기본을 내포하고 있습니다.

  • x는 변수, 10은 데이터, Python은 이 둘을 묶어 객체 모델로 처리합니다.

  • 하지만 이걸 정말 깊게 이해하려면 "변수란 정확히 뭘 의미하는지", "값은 어디 저장되는지",
    "int와 str은 어떻게 다르고, 실제로 메모리 상에서 어떤 식으로 동작하는지"를
    차근히 짚고 넘어가야 합니다.

  • 이 글에서는 Python의 변수와 데이터 타입을 완전히 딥하게 분석하며,
    단순한 개념 소개에 그치지 않고 파이썬 내부 동작, 객체 모델, 성능적 시사점까지 함께 알아보겠습니다.

📘 1. 변수란 무엇인가? 정말로?


  • Python에서 "변수"란,
    우리가 일반적으로 타 언어에서 알고 있는 "값을 담는 박스" 같은 개념과 조금 다릅니다.

🧠 Python의 변수는 "객체에 대한 참조(Reference)를 저장하는 이름"입니다.

즉, Python에서 x=10 이라고 쓰면, x는 '10 이라는 객체'에 붙은 이름일 뿐입니다.

이걸 시각적으로 표현하면

x ──▶ [int 객체: 10]

변수 x는 메모리상에 있는 '10 이라는 값을 가진 int 객체'를 가리키고 있는 것입니다.

값 자체를 저장하고 있는 게 아니라, 그 값이 있는 위치를 가리키고 있는 포인터 역할을 하는 것입니다.

x = 10
print(id(x))  # 객체의 고유 ID (메모리 주소와 비슷한 역할)

📘 2. Python의 모든 것은 객체이다.


  • Python은 철저하게 "객체지향적 설계"를 따르는 언어입니다.

  • "모든 것은 객체다" 라는 말은 단순한 문구가 아니라 실제 구조를 뜻합니다.

    • 정수 '10'도 객체입니다.
    • 문자열 "hello"도 객체입니다.
    • 리스트 [1,2,3], 심지어 함수 def my_func(); 도 객체입니다.
  • 객체는 내부적으로 '클래스의 인스턴스'로 구성되어 있으며, 이 클래스는 내장 타입들입니다.

x = 10
print(type(x))        # <class 'int'>
print(x.__class__)    # <class 'int'>

이처럼 파이썬에서는 어떤 값을 넣든
결국에 내부적으로는 '클래스 인스턴스'라는 객체 구조를 따르고 있습니다.

📘 3. 동적 타이핑과 변수의 자유.


  • Python은 "동적 타이핑(Dynamic Typing)" 언어입니다.

  • 즉, 변수에는 타입이 없고, 값(객체)만 타입을 가지고 있습니다.

x = 10      # x는 int 객체 참조
x = "Hello" # x는 이제 str 객체 참조
  • 변수 x는 타입이 바뀌는 것이 아니라,
    단지 다른 타입의 객체를 참조하게 되는 것 입니다.
  • 이로 인해, python은 유연하고 빠르게 코드를 작성할 수 있지만, 타입 오류를 런타임까지 알 수 없다는 단점도 있습니다.

📘 4. 데이터 타입 ( 기본형과 복잡형 )


Python의 데이터 타입은 크게 두가지로 나눌 수 있습니다.

📗 기본형 ( Primitive Types )

  • int : 정수형

  • float : 실수형

  • bool : 불리언(참/거짓)

  • str : 문자열

  • NomeType : 아무 것도 없음 ( None)

📗 복합형 (Container Types)

  • list: 리스트

  • tuple : 튜플

  • dict : 딕셔너리 (key-value)

  • set : 집합 (중복 없음)

  • frozenset, range, complex, bytes 등도 포함..

이 모든 타입들은 사실 'class'로 정의된 객체들이며,
내부에 여러 메서드와 속성을 가지고 있습니다.

📘 5. 변수, 객체, 참조


is vs ==

  • 이 두 연산자는 Python에서 매우 중요한 차이를 보입니다.

    • "==" 는 두 객체의 "값이 같은지"를 비교합니다.
    • "is"는 두 객체가 "같은 객체(같은 메모리 참조)" 인지를 비교합니다.
a = 1000
b = 1000
print(a == b)  # True
print(a is b)  # False (동일 객체 아님)
  • 파이썬은 " -5 ~ 256 " 범위의 정수에 대해 "인터닝(interning)" 최적화를 수행해서
    같은 객체를 재사용하지만, 범위를 벗어나면 새로운 객체를 생성합니다.

📘 6. 타입 변환 ( Casting) 과 암묵적 형변환.


명시적 형변환 ( Explicit )

a = "42"
b = int(a)    # str → int

암묵적 형변환 ( Implicit )

x = 10      # int
y = 3.14    # float
z = x + y   # float (자동 형변환)

파이썬은 손실이 없을 때만 암묵적으로 타입을 바꾸며, 필요시 명시적 캐스팅을 요구합니다.

📘 7. 불변(Immutable)과 가변(Mutable)


불변형 (Immutable)가변형 (Mutable)
int, float, str, tuple, frozensetlist, dict, set, bytearray

ex)

x = "hello"
x += " world"

str은 불변,

위 연산은 기존의 문자열을 수정하는 것이 아니라, 새로운 str 객체를 생성하고 x가 그 객체를 참조하게 되는 것.

📘 8. 타입 힌트 ( Type Hint )와 정적 검사


Python은 기본적으로 동적 타입 언어지만, 3.5 버전부터는 타입 힌트(Type Hint) 를 지원합니다.

def greet(name: str) -> str:
    return f"Hello, {name}"
  • 이는 mypy, pyright 등의 도구를 통해 정적 분석이 가능하게 해주며,
  • 대규모 프로젝트에서 유지보수를 도와줍니다.

📘 9. 내부 최적화와 인터닝(Interning)


정수 인터닝.

  • 파이썬은 -5 ~ 256 범위의 정수는 미리 만들어두고 재사용합니다. 메모리 낭비를 줄이고 성능을 높이기 위함입니다.
a = 256
b = 256
print(a is b)  # True

문자열 인터닝.

  • 짧고, 알파벳만으로 구성된 문자열도 내부적으로 캐싱됩니다.
x = "hello"
y = "hello"
print(x is y)  # True
  • 하지만, 동적으로 만든 문자열은 인터닝되지 않을 수 있습니다.

📘 10. 요약.


개념설명
변수객체에 대한 참조 이름
객체클래스의 인스턴스로, 모든 데이터는 객체다
동적 타이핑변수는 타입이 없고, 값이 타입을 가진다
불변 vs 가변객체의 변경 가능 여부
is vs ==객체 비교 vs 값 비교
인터닝자주 쓰이는 객체를 캐시하여 재사용
타입 힌트동적 언어의 한계를 보완하는 정적 분석 도구

0개의 댓글