Mutable과 Immutable 객체

2024. 4. 29. 01:06Β·ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Python

 

νŒŒμ΄μ¬μ—μ„œ λ³€μˆ˜λŠ” 두 κ°€μ§€ νƒ€μž…μœΌλ‘œ λ‚˜λ‰©λ‹ˆλ‹€: mutable(κ°€λ³€)κ³Ό immutable(λΆˆλ³€)μž…λ‹ˆλ‹€. 이 λ‘˜μ€ λ³€μˆ˜κ°€ λ³€κ²½ κ°€λŠ₯ν•œμ§€ 여뢀에 따라 κ΅¬λΆ„λ©λ‹ˆλ‹€.

Immutable 객체

  • Immutable κ°μ²΄λŠ” ν•œ 번 μƒμ„±λ˜λ©΄ 값을 λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€. 즉, λ³€μˆ˜κ°€ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ ν›„μ—λŠ” κ·Έ 값을 λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • μ£Όμš” immutable 데이터 νƒ€μž…μœΌλ‘œλŠ” int(μ •μˆ˜), float(뢀동 μ†Œμˆ˜μ  수), str(λ¬Έμžμ—΄), tuple(νŠœν”Œ) 등이 μžˆμŠ΅λ‹ˆλ‹€.
x = 5  # int λ³€μˆ˜λŠ” immutable
y = "Hello"  # str λ³€μˆ˜λ„ immutable

# 값을 λ³€κ²½ν•˜λ €κ³  ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.
x = x + 1  # x 값을 λ³€κ²½ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, μƒˆλ‘œμš΄ 값이 ν• λ‹Ήλ©λ‹ˆλ‹€.
y[0] = 'h'  # λ¬Έμžμ—΄μ€ λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • immutable 객체인 νŠœν”Œμ€ μ €μž₯된 값을 μˆ˜μ •ν–ˆμ„ λ•Œ μƒˆλ‘œμš΄ νŠœν”Œμ΄ λ§Œλ“€μ–΄μ§€λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.(객체의 μ£Όμ†Œκ°€ μƒˆλ‘­κ²Œ 할당됨)
  • λ”°λΌμ„œ immutable κ°μ²΄λŠ” λ³€κ²½ λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— call by reference의 output이 될 수 μ—†μŠ΅λ‹ˆλ‹€.
  • μƒˆλ‘­κ²Œ λ§Œλ“  객체λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜λ‘œ λŒ€μ²΄ν•©μ‹œλ‹€.

 

Mutable 객체

  • Mutable κ°μ²΄λŠ” 값을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, λ³€μˆ˜κ°€ λ©”λͺ¨λ¦¬μ— ν• λ‹Ήλœ 후에도 값을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ£Όμš” mutable 데이터 νƒ€μž…μœΌλ‘œλŠ” list(리슀트), dict(사전), set(μ§‘ν•©) 등이 μžˆμŠ΅λ‹ˆλ‹€.
a = [1, 2, 3]  # λ¦¬μŠ€νŠΈλŠ” mutable
b = {'name': 'John', 'age': 30}  # 사전도 mutable

# 값을 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
a[0] = 100  # 리슀트 λ‚΄μ˜ κ°’ λ³€κ²½
b['age'] = 31  # 사전 λ‚΄μ˜ κ°’ λ³€κ²½
  • μˆ˜μ • κ°€λŠ₯ν•œ κ°μ²΄λŠ” idκ°€ λ°”λ€Œμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • mutable κ°μ²΄λŠ” 레퍼런슀λ₯Ό ν†΅ν•œ κ°’ 변경을 ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ— Call by reference에 μ˜ν•œ κ°’ 변경이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ 차이둜 인해 ν”„λ‘œκ·Έλž˜λ°ν•  λ•Œ λ³€μˆ˜μ˜ νƒ€μž…μ„ κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€. Immutable λ³€μˆ˜λŠ” 값이 λ³€ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ•ˆμ •μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Mutable λ³€μˆ˜λŠ” 동적인 데이터λ₯Ό μ²˜λ¦¬ν•  λ•Œ μœ μš©ν•˜μ§€λ§Œ, 값이 자주 λ³€κ²½λ˜λ―€λ‘œ μ‹ μ€‘ν•˜κ²Œ 닀루어야 ν•©λ‹ˆλ‹€.

ν•¨μˆ˜λ₯Ό 잘 μ •μ˜ν•˜λ €λ©΄ 파이썬 λ‚΄μ—μ„œ μ°Έμ‘°ν•˜λŠ” 객체의 성격을 κ΅¬λΆ„ν•΄μ„œ ν•¨μˆ˜λ₯Ό μ •μ˜ν•΄μ•Όλ§Œ ν•©λ‹ˆλ‹€.

 

μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ > Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

코루틴  (0) 2024.06.23
파이썬 κΉŠμ€ 볡사와 얕은 볡사  (0) 2024.04.29
파이썬 νŒ¨ν‚Ή(packing)κ³Ό μ–ΈνŒ¨ν‚Ή(unpacking)의 λͺ¨λ“  것  (3) 2023.12.17
파이썬 map, filter ν•¨μˆ˜(with. iterator)  (1) 2023.12.17
파이썬 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜, λ”•μ…”λ„ˆλ¦¬ μ»΄ν”„λ¦¬ν—¨μ…˜μ˜ λͺ¨λ“  것  (0) 2023.12.12
'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • 코루틴
  • 파이썬 κΉŠμ€ 볡사와 얕은 볡사
  • 파이썬 νŒ¨ν‚Ή(packing)κ³Ό μ–ΈνŒ¨ν‚Ή(unpacking)의 λͺ¨λ“  것
  • 파이썬 map, filter ν•¨μˆ˜(with. iterator)
μ„œμ•„λž‘πŸ˜ƒ
μ„œμ•„λž‘πŸ˜ƒ
Just Do ItπŸ’ͺ
  • μ„œμ•„λž‘πŸ˜ƒ
    G-Stack
    μ„œμ•„λž‘πŸ˜ƒ
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (144)
      • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (78)
        • C++ 기초 (28)
        • C++ μ‘μš© (18)
        • Python (18)
        • JavaScript & NodeJS (0)
        • Go (12)
        • React & NextJS (2)
        • Java (0)
      • AI (2)
      • 컴퓨터 ꡬ쑰 & 운영체제 (31)
      • μ•Œκ³ λ¦¬μ¦˜ (12)
      • λ°μ΄ν„°λ² μ΄μŠ€ (5)
      • λ„€νŠΈμ›Œν¬ (3)
      • λ””μžμΈνŒ¨ν„΄ (5)
      • μ„œλΉ„μŠ€ & 툴 (7)
      • νŠΈλ Œλ“œ&이슈 (1)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

    • GμŠ€νƒμ˜ 기술 λΈ”λ‘œκ·Έ
  • 인기 κΈ€

  • νƒœκ·Έ

    go
    c++
    cpu
    반볡문
    가상메λͺ¨λ¦¬
    상속
    RAM
    init
    νŒ¨ν‚€μ§€
    포인터
    Thread
    fork
    λ©”λͺ¨λ¦¬
    λ””μžμΈνŒ¨ν„΄
    μ•Œκ³ λ¦¬μ¦˜
    ν•˜λ“œλ””μŠ€ν¬
    component
    파이썬
    νŒŒμΌμž…μΆœλ ₯
    λ³€μˆ˜
    쑰건문
    λ°μ΄ν„°λ² μ΄μŠ€
    c
    pointer
    ν•¨μˆ˜
    λ°°μ—΄
    컴퓨터
    STD
    μŠ€νƒ
    μž¬κ·€
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.6
μ„œμ•„λž‘πŸ˜ƒ
Mutable과 Immutable 객체
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”