Guidelines

얕은 볡사와 κΉŠμ€ λ³΅μ‚¬μ˜ 차이점

νŒŒμ΄μ¬μ—μ„œ 객체(Object)λŠ” 데이터와 κ·Έ 데이터λ₯Ό λ‹€λ£¨λŠ” 방법(λ©”μ„œλ“œ)λ₯Ό ν•¨κ»˜ λ‹΄κ³  μžˆλŠ” 기본적인 데이터 λ‹¨μœ„μž…λ‹ˆλ‹€.

νŒŒμ΄μ¬μ—μ„œλŠ” 숫자, λ¬Έμžμ—΄, 집합 λ“± 거의 λͺ¨λ“  것이 객체라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

객체λ₯Ό λ³΅μ‚¬ν•˜λŠ” λ°©λ²•μ—λŠ” 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)κ°€ μžˆμŠ΅λ‹ˆλ‹€.

  • 얕은 λ³΅μ‚¬λŠ” μ›λ³Έμ΄λ‚˜ 볡사본 쀑 ν•˜λ‚˜λ₯Ό λ³€κ²½ν•˜λ©΄ λ‹€λ₯Έ ν•˜λ‚˜μ—λ„ 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.

  • κΉŠμ€ λ³΅μ‚¬λŠ” 원본과 볡사본이 μ™„μ „νžˆ λ…λ¦½μ μ΄λ―€λ‘œ, ν•œμͺ½μ„ λ³€κ²½ν•˜λ”λΌλ„ λ‹€λ₯Έ μͺ½μ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.


얕은 볡사(Shallow Copy)

얕은 λ³΅μ‚¬λŠ” λ³΅μ‚¬λœ 객체와 원본 객체가 λ‚΄λΆ€ 객체λ₯Ό κ³΅μœ ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ λ³΅μ‚¬λœ 객체λ₯Ό λ³€κ²½ν•˜λ©΄ 원본 객체도 ν•¨κ»˜ λ³€κ²½λ©λ‹ˆλ‹€.

μƒˆλ‘œμš΄ 리슀트λ₯Ό μ •μ˜ν•˜λŠ” list() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 얕은 볡사λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜ μ½”λ“œ μ˜ˆμ‹œλŠ” 얕은 볡사λ₯Ό μˆ˜ν–‰ν•œ ν›„, λ³΅μ‚¬λœ 객체의 μš”μ†Œλ₯Ό λ³€κ²½ν•˜λ©΄ 원본 객체도 ν•¨κ»˜ 변경됨을 λ³΄μ—¬μ€λ‹ˆλ‹€.

얕은 볡사 μ˜ˆμ‹œ
# 원본 리슀트 생성 original = [1, 2, 3, [4, 5, 6]] # 얕은 볡사 μˆ˜ν–‰ ν›„ 'shallow_copied'에 ν• λ‹Ή shallow_copied = list(original) # 'shallow_copied'의 μ€‘μ²©λœ 리슀트 μš”μ†Œ λ³€κ²½ shallow_copied[3][0] = 99 # 원본 λ¦¬μŠ€νŠΈλ„ 변경됨 print("Original:", original) # [1, 2, 3, [99, 5, 6]]

μœ„ μ˜ˆμ‹œμ—μ„œ shallow_copied 리슀트의 μ€‘μ²©λœ 리슀트 [4, 5, 6]λ₯Ό λ³€κ²½ν•˜λ©΄, 원본 리슀트인 original도 ν•¨κ»˜ λ³€κ²½λ©λ‹ˆλ‹€.


κΉŠμ€ 볡사(Deep Copy)

κΉŠμ€ λ³΅μ‚¬λŠ” 객체의 λͺ¨λ“  κ³„μΈ΅μ—μ„œ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

μ΄λ ‡κ²Œ λ³΅μ‚¬λœ κ°μ²΄λŠ” 원본 객체와 μ™„μ „νžˆ 독립적이기 λ•Œλ¬Έμ—, 원본 객체λ₯Ό 변경해도 λ³΅μ‚¬λœ κ°μ²΄μ—λŠ” μ•„λ¬΄λŸ° 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•„λž˜ μ½”λ“œ μ˜ˆμ‹œλŠ” κΉŠμ€ 볡사λ₯Ό μˆ˜ν–‰ν•œ ν›„, λ³΅μ‚¬λœ 객체의 μš”μ†Œλ₯Ό 변경해도 원본 κ°μ²΄μ—λŠ” 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠμŒμ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

κΉŠμ€ 볡사 μ˜ˆμ‹œ
# 'copy' λͺ¨λ“ˆμ„ import import copy original = [1, 2, 3, [4, 5, 6]] deep_copied = copy.deepcopy(original) deep_copied[3][0] = 99 # κ²°κ³Ό 좜λ ₯ print("Original:", original) # [1, 2, 3, [4, 5, 6]] 좜λ ₯ : 원본 λ¦¬μŠ€νŠΈλŠ” λ³€κ²½λ˜μ§€ μ•ŠμŒ print("Deep Copied:", deep_copied) # [1, 2, 3, [99, 5, 6]] 좜λ ₯ : λ³΅μ‚¬λœ 리슀트만 변경됨

μœ„ μ½”λ“œμ—μ„œ import ν‚€μ›Œλ“œλŠ” μ™ΈλΆ€μ˜ μ½”λ“œλ₯Ό 가져와 μ‚¬μš©ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.

copy λͺ¨λ“ˆμ€ νŒŒμ΄μ¬μ— 기본적으둜 λ‚΄μž₯λ˜μ–΄ μžˆλŠ” λͺ¨λ“ˆλ‘œ, copy.deepcopy() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ κΉŠμ€ 볡사λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ°Έκ³  : ν”„λ‘œκ·Έλž˜λ°μ—μ„œ λͺ¨λ“ˆ(Module)은 ν•¨μˆ˜, λ³€μˆ˜, 클래슀 등을 λͺ¨μ•„놓은 μ™ΈλΆ€ μ½”λ“œ νŒŒμΌμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

Mission
0 / 1

μ•„λž˜ λΉˆμΉΈμ— κ°€μž₯ μ μ ˆν•œ λ‹¨μ–΄λŠ” λ¬΄μ—‡μΌκΉŒμš”?

원본 객체와 볡사 객체가 λ‚΄λΆ€ 객체λ₯Ό κ³΅μœ ν•˜μ—¬, ν•˜λ‚˜λ₯Ό λ³€κ²½ν•˜λ©΄ λ‹€λ₯Έ ν•˜λ‚˜μ—λ„ 영ν–₯을 λ―ΈμΉ˜λŠ” 것은 λ³΅μ‚¬μž…λ‹ˆλ‹€.
얕은
κΉŠμ€
μ™„μ „ν•œ
뢀뢄적

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help

Code Editor

Run
Generate

Execution Result