a = [1, 2, 3]
b = a[:]
a[0] = 99
print(a, b) # ์๋ก ๋ค๋ฅด๊ฒ ๋์จ๋ค
p = [1, 2, [3, 4]]
q = p[:]
p[2][0] = 999
print(p, q) # ๋ ๋ค ๊ฐ์ด ๋ฐ๋๋ค
๋ ์ฝ๋ ๋ชจ๋ ์ฌ๋ผ์ด์ฑ([:])์ผ๋ก ๋ณต์ฌํ๋๋ฐ, ์ ๊ฒฐ๊ณผ๋ ์์ ํ ๋ค๋ฅผ๊น?
์ด ๊ธ์์๋ ์ด ์ง๋ฌธ ํ๋๋ก ์ด์ด์ง๋
- ๋ฆฌ์คํธ ๋ณต์ฌ์ ์ง์ง ์๋ฏธ
- ์์ ๋ณต์ฌ(shallow copy)์ ๊น์ ๋ณต์ฌ(deep copy)
- “๊ฒ์ ๋ณต์ฌ๋๋๋ฐ ์ ์์ชฝ์ ๊ฐ์ด ๋ฐ๋๋์ง”
๋ฅผ ๊ฐ๋ ์ค์ฌ์ผ๋ก ์ ๋ฆฌํด๋ณธ๋ค.
1๏ธโฃ ๋ฆฌ์คํธ ๋ณ์์ ์ง์ง ์๋ฏธ: “๋ณต์ฌ”๊ฐ ์๋๋ผ “์ฐธ์กฐ”
ํ์ด์ฌ์์ ๋ฆฌ์คํธ ๋ณ์๋
๋ฆฌ์คํธ ์์ฒด๋ฅผ ๋ด๊ณ ์๋ ๊ฒ ์๋๋ผ,
๋ฆฌ์คํธ๊ฐ ์๋ ์ฃผ์(์ฐธ์กฐ) ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
a = [1, 2, 3]
b = a
์ด๋:
- a์ b๋ ๊ฐ์ ๋ฆฌ์คํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค
- ๋ ์ค ํ๋๋ฅผ ์์ ํ๋ฉด ๊ฐ์ด ๋ฐ๋๋ค
2๏ธโฃ ์ฌ๋ผ์ด์ฑ([:])์ ๋ฌด์์ ๋ณต์ฌํ ๊น?
a = [1, 2, 3]
b = a[:]
"a์ ๋ฆฌ์คํธ๋ฅผ ์์ ํ ๋ณต์ฌํ๋ค"๋ผ๋ ๊ฑด ์คํด!
์ ํํ ํํ = "์ฌ๋ผ์ด์ฑ์ ‘๋ฆฌ์คํธ ๊ป๋ฐ๊ธฐ’๋ง ์๋ก ๋ง๋ ๋ค"
โญ๏ธ ์์ ๋ณต์ฌ (Shallow Copy)
์ฌ๋ผ์ด์ฑ([:])์ ์์ ๋ณต์ฌ๋ค.
- ๋ฐ๊นฅ ๋ฆฌ์คํธ๋ ์๋ก ๋ง๋ ๋ค
- ์์ ๋ค์ด ์๋ ์์๋ ๊ทธ๋๋ก ๊ณต์ ํ๋ค
p = [1, 2, [3, 4]]
q = p[:]
p[2][0] = 999
print(p, q)
- p[:]
[1, 2] ๋ถ๋ถ: ๋ณต์ฌ / [3, 4] ๋ถ๋ถ: ๊ณต์ - p[2][0] = 3 = 999
์ด ๋ด์ฉ์ q์ P๊ฐ ๊ณต์ ํจ- p์ q๋ ์๋ก ๋ค๋ฅธ ๋ฆฌ์คํธ
- ํ์ง๋ง ๊ทธ ์์ ์๋ [3, 4]๋ ๊ฐ์ ๊ฐ์ฒด
โญ๏ธ ๊น์ ๋ณต์ฌ (Deep Copy)
๋ด๋ถ ๊ฐ์ฒด๊น์ง ์์ ํ ๋ ๋ฆฝ์ํค๊ณ ์ถ๋ค๋ฉด ๊น์ ๋ณต์ฌ๊ฐ ํ์ํ๋ค.
import copy
q = copy.deepcopy(p)
- ๊ฒ ๋ฆฌ์คํธ๋ ์๋ก ๋ง๋ฆ
- ์์ชฝ ๋ฆฌ์คํธ๋ ์ ๋ถ ์๋ก ๋ง๋ฆ
- ์์ ํ ๋ ๋ฆฝ์ ์ธ ๊ตฌ์กฐ → ์ด์ ํ์ชฝ์ ์์ ํด๋ ๋ค๋ฅธ ์ชฝ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
โ ์ธ์ ๊น์ ๋ณต์ฌ๊ฐ ํ์ํ ๊น?
- ์ค์ฒฉ ๋ฆฌ์คํธ๋ฅผ ๋ค๋ฃฐ ๋
- ์๋ณธ ๋ฐ์ดํฐ ๋ณดํธ๊ฐ ์ค์ํ ๋
- ํจ์ ์์์ ๋ฆฌ์คํธ๋ฅผ ์์ ํด์ผ ํ ๋
- “๋ณต์ฌํ๋๋ฐ ์ ๊ฐ์ด ๋ฐ๋์ง?”๋ผ๋ ์๊ฐ์ด ๋ค ๋
๐ ๋ง๋ฌด๋ฆฌ ์์ฝ
- ๋ฆฌ์คํธ ๋ณ์๋ ๊ฐ์ ๋ด์ง ์๊ณ ์ฐธ์กฐ๋ฅผ ๋ด๋๋ค
- [:]๋ ๊ฒ๋ง ๋ณต์ฌํ๋ ์์ ๋ณต์ฌ๋ค
- ๋ฆฌ์คํธ ์์ ๋ฆฌ์คํธ๊ฐ ์์ผ๋ฉด ๋ด๋ถ๋ ๊ณต์ ๋๋ค
- ์์ ํ ๋ ๋ฆฝ์ด ํ์ํ๋ฉด ๊น์ ๋ณต์ฌ๋ฅผ ์จ์ผ ํ๋ค