๋งค๋ ์ํด ๋ชฉํ๋ก ๋ธ๋ก๊ทธ ๊ธ ์์ฑํ๊ธฐ๋ฅผ ๋ชฉํ๋ก ์ก๋๋ค. ํ์ง๋ง ์ฑ๊ฒฉ์ ๋ธ๋ก๊ทธ ๊ธ์ ๋ง์ ์ ๋ณด๋ฅผ ์ ์ด์ผ ํ๊ณ , ์์ฐ์ค๋ฝ๊ฒ ๋ธ๋ก๊ทธ ๊ธ ์ฐ๊ธฐ๋ ๋งค์ฐ ๋ฌด๊ฑฐ์ด ํ์คํฌ๋ก ์๋ฆฌ์ก์๋ค. ์์ฐ์ค๋ฝ๊ฒ ๊ธํ ์ผ์ด๋ ํผ๊ณคํ ์ํฉ์ด ์๊ธฐ๋ฉด ๋ธ๋ก๊ทธ ๊ธ ์ฐ๊ธฐ๋ ๋ท์ ์ผ๋ก ๋ฏธ๋ค์ง๊ณค ํ๋ค.
๊ทธ๋์ ์ฌํด ๋ชฉํ์ค ํ๋์ธ ๋งค ์ฃผ ํ๋์ ๋ธ๋ก๊ทธ ๊ธ ์ฐ๊ธฐ์๋, ๊ฐ๋ฐํ๋ฉด์ ๋ง์ฃผ์น๋ ๊ถ๊ธ์ฆ์ ๊พธ์คํ ๋ธ๋ก๊ทธ์ ๋จ๊ฒจ ๋ณด์! ๋ผ๋ ์จ์ ๋ชฉํ๊ฐ ํ๋ ๋ ์จ์ด ์๋ค. ๋ ๊ทธ๋ฌ๋ฉด์ ๋ด๊ฐ ๋จธ๋ฆฌ์์๋ง ๋ด๋ ์ง์์ ๊น๋ํ๊ฒ ์ ๋ฆฌํ๋ ค๋ ๊ฒ๋ ์๋ค.
์ด๋ฒ์ฃผ ์์ธ์ ํ๋ ํ์ด์ ์ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ์ ๊ดํ ์ด์ผ๊ธฐ์ด๋ค. ์ ๋ฌธ๊ฐ๋ฅผ ์ํ ํ์ด์ ์คํฐ๋๋ฅผ ์ค๋นํ๋ฉด์ ํฅ๋ฏธ๋ก์ ๋ ๋ด์ฉ์ ์ ๋๋ค. ์ธ๊ธํ ๋ด์ฉ์ค ์ผ๋ถ๋ ์ ๋ฌธ๊ฐ๋ฅผ ์ํ ํ์ด์ ์์ ๊ฐ์ ธ์ ๋ณด์๋ค.
๋๋ถ๋ถ ์ฐ๋ฆฌ๋ ๋ณ์ ๊ฐ๋ ์ ๋ฐฐ์ธ ๋, ํน์ ์์์ ๋ฌผ๊ฑด์ ๋ด๋ ๊ทธ๋ฆผ์ ๋ ์ฌ๋ฆฌ๊ฒ ๋ฐฐ์ด๋ค. ๊ฐ์ ๋ณด๊ดํ ์ ์๋ ์์๊ฐ ๋ฐ๋ก ๋ณ์์ด๋ฉฐ, ์์ ์์ ๋ค์ด๊ฐ ์๋ ๋ฌผ๊ฑด์ด ๋ณ์ ์์ ์๋ ๊ฐ์ด๋ผ๊ณ ๋ฐฐ์ด๋ค.
ํ์ด์ ์ ๋ณ์ ํ ๋น์ ์ฝ๊ฐ ๋๋์ด ๋ค๋ฅด๋ค. ๊ฐ์ฒด๊ฐ ์ฐ์ ์์ฑ๋๋ฉฐ, ๊ทธ ๊ฐ์ฒด์ ๋ณ์๊ฐ ๋ณ๋ช
์ฒ๋ผ ๋ถ๋๋ค. ์ฒ์ ๋ณด๋ฉด ์ผ์? ๋ฌด์จ ์๋ฆฌ์ง?
์ถ๋ค. ํด๋น ๋ฌธ์ ๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด, ๊ฐ๋จํ ์ฝ๋๋ฅผ ๊ฐ์ ธ ์ ๋ณด์๋ค.
>>> class A:
... def __init__(self):
... print(f"A id: {id(self)}")
>>> x = A()
A id: 4519628752
>>> y = A() * 10
A id: 4519649488
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for *: 'A' and 'int'
๋น์ฐํ ์ค๋ฅ๊ฐ ๋๋ค. ํ์ง๋ง ์ ์ฌํ ์ค๋ฅ์ ์์๋ฅผ ๋ณด์. ์ฐ์ A
๊ฐ์ฒด๊ฐ ์์ฑ๋๊ณ ๊ทธ ์ดํ, A ๊ฐ์ฒด์ __mul__
๋ฉ์๋๊ฐ ์๋ค๊ณ ์ค๋ฅ๋ฅผ ๋ด๋ ์ค์ด๋ค. ์ฆ, ๋จผ์ ๊ฐ์ฒด๊ฐ ์์ฑ ๋ ์ดํ์ ์ง์ ํ ๋ณ์์ ์ด๋ฆ์ด ์ด๋ฆํ์ฒ๋ผ ๊ฐ์ฒด์ ๋ถ๊ฒ ๋๋ค. ์ด๊ฒ์ด ํ์ด์ ์์ ์๋ฏธํ๋ ๋ณ์์ ์ ์ธ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ด์ ์์ ํน์ ๋ณ์์ ๊ธฐ์กด์ ์๋ ๊ฐ์ ํ ๋นํ ๋์๋ ์์ ๋ณต์ฌ (Shallow copy)๊ฐ ์ผ์ด๋๊ฒ ๋๋ค. ์๋ก์ด ์์์ ๊ฐ์ ๋ด๋ ๊ฒ์ด ์๋, ๊ธฐ์กด์ ์๋ ๊ฐ์ฒด์ ์๋ก์ด ์ด๋ฆํ๋ฅผ ๋ถํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
>>> x = A()
A id: 4519649744
>>> y = x
>>> id(y)
4519649744
>>> x is y
True
ํ์ด์ ์์
is
์ฐ์ฐ์๋, ๋ ๋ณ์์ id ๊ฐ์ ๋น๊ตํ๋ ๊ฒ์ด๋ค. ๊ฐ ํ์ด์ ๊ตฌํ์ฒด๋ง๋ค id์ ์ ์๊ฐ ๋ค๋ฅด์ง๋ง, ์ฃผ๋ก ์ฌ์ฉํ๋ cpython์์๋ ๋ฉ๋ชจ๋ฆฌ์ ์์น์ id์ ๊ฐ์ด ๋์ผํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ์ด์ ๋ด๋ถ์์ ์ ์ญ์ผ๋ก ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด (์: True, False, None)์ ๊ฐ์ ๋น๊ตํ๊ธฐ ์ํด์๋is
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํ๊ณ ์๋ค.
์ด๋ฅผ ๊ฐ์ฅ ์ฝ๊ฒ ์ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ํ๋์ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ , ์๋ก์ด ๋ณ์์ ํ ๋นํด ์ค ํ, ์ ๋ณ์์ append
ํจ์๋ฅผ ๋ถํ๋ณด๋ ๊ฒ์ด๋ค.
>>> x = [1, 2, 3]
>>> y = x
>>> y.append(4)
>>> x
[1, 2, 3, 4]
์ด ํ๋๋ ํ๋์ ๊ธ์ ๋ฐ๋ก ํ์ด๋๊ฐ๋ ค๊ณ ํ์ง๋ง, ๊ฐ๋จํ๊ฒ ์ ์ด๋ณด๋ ค ํ๋ค.
ํ์ด์ ์์๋ ๋ฉ๋ชจ๋ฆฌ์ ํด์ ํ๋ ๋ช
๋ น์ด๋ก del
์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๊ณค ํ์ง๋ง, ์ ํํ๋
ํด๋น ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ๋ช
์ ์ ๊ฑฐ ํด์ฃผ๋ ๋ช
๋ น์ ๊ฐ๊น๋ค.
ํ์์ฒ๋ผ ๊ธ์ ํ์ ์ฃผ์ง ์์์ ์ด์ ๋๋ก๋ ๊ด์ฐฎ์๊น ์ถ์ง๋ง. ์ฐ์ ์ฒซ ๊ธ์ ๊ฐ๋ณ๊ฒ ๊ฐ๋ณ๊ฒ ๐