๋ฐ์ํ
๐ call by value vs call by reference ์ ์
- call by value: ๊ฐ์ ์ํ ํธ์ถ
- call by reference: ์ฐธ์กฐ์ ์ํ ํธ์ถ
๐ call by value vs call by reference ์ฐจ์ด
- ๊ฐ์ฒด์๋ ๊ฐ๊ณผ ์ฃผ์๊ฐ ์๋ค. ์ฐ๋ฆฌ๋ ์ค์ ๋ก ๊ฐ๋ง ๋ณด๊ณ ์์ง๋ง ์ฃผ์๋ ํ์ธํ ์ ์๋ค.
c = 20
print(f'๊ฐ: {c}') # ๊ฐ: 20
print(f'์ฃผ์: {id(c)}') # ์ฃผ์: 140734032078064
- ์ด๋ค ํจ์์ argument๋ฅผ ์ ๋ฌ ํ ๋ call by value ์ call by reference๋ฅผ ์ ํํ ์ ์๋ค.
- call by value์ ๊ฒฝ์ฐ ํจ์์ ๊ฐ์ ์ ๋ฌํด์ ๊ทธ ํจ์์์์ ํด๋น ๊ฐ์ ๋ฐ๊พผ๋ค๋ฉด?
- ๊ธฐ์กด์ ๊ฐ์ ๋ฐ๋์ง ์๋๋ค.
- ์ฐ๋ฆฌ๋ ๊ฐ๋ง ๋ณต์ฌํ๋ค. ์ฆ, ์ฃผ์๋ ๋ค๋ฆ
- ๊ธฐ์กด์ ๊ฐ๊ณผ ์๋ก ์ํฅ์ ์ฃผ์ง ์๊ธฐ ๋๋ฌธ์ ์์ ํ๋ค. ์๋์ ๊ฐ์ ๋ณด์กดํ ์ ์๋ค.
- ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ๋์ด ๋์ด๋๋ค. ๋ง์ด ์ฌ์ฉํ๋ฉด ๋ณ๋ก ์ข์ง ์๋ค.
- call by reference์ ๊ฒฝ์ฐ ํจ์์ ๊ฐ์ ์ ๋ฌํด์ ๊ทธ ํจ์์์์ ํด๋น ๊ฐ์ ๋ฐ๊พผ๋ค๋ฉด?
- ๊ธฐ์กด์ ๊ฐ ๋ํ ๋ฐ๋๋ค.
- call by reference ๋ ๊ฐ๊ณผ ์ฃผ์๋ฅผ ๋ณต์ฌํ๋ค. ์ฆ, ๊ฐ์ ๊ฐ์ฒด๋ผ๊ณ ๋ณผ ์ ์๋ค.
- ๊ธฐ์กด์ ๊ฐ๊ณผ ์๋ก ์ํฅ์ ๋ฐ๋๋ค. ์ํํ๋ค.
- ํ์ง๋ง ์ฐธ์กฐ๋ง ํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฅด๋ค.
๐ call by assignment with python
- ํ์ง๋ง ํ์ด์ ์์๋ ์ด๋ฌํ ๊ฐ๋ ์ด ๋ฐ๋ก ์กด์ฌ ํ์ง ์๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ์ ํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ์ฒด๊ฐ ์๋ ๊ฐ์ง๊ณ ์๋ ์ฐธ์กฐ๋ฐฉ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.
- mutable: list, dict, set
- immutable: str, int, tuple
- mutableํ ๊ฐ์ฒด๋ call by reference๋ฅผ
- immutableํ ๊ฐ์ฒด๋ call by value๋ฅผ ๋ฐ๋ฅธ๋ค.
๐ call by assignment ์์
# immutable: str, int, tuple
# ํจ์์ ๋ฃ๊ณ ๊ฐ์ ๋ฐ๊ฟ๋ ์๋์ ๊ฐ์ ๋ณํ์ง ์๋๋ค.
def immu(a):
a += 10
print(f'ํจ์์ ๋ฃ๊ณ ๋ฐ๊พผ ๊ฐ: {a}, ์ฃผ์: {id(a)}')
return a
a = 10
print(f'์ด๊ธฐ ๊ฐ: {a}, ์ฃผ์: {id(a)}')
immu(a)
print(f'ํจ์ ์คํ ํ ๊ฐ:{a}, ์ฃผ์: {id(a)}')
'''
์ด๊ธฐ ๊ฐ: 10, ์ฃผ์: 140734032077744
ํจ์์ ๋ฃ๊ณ ๋ฐ๊พผ ๊ฐ: 20, ์ฃผ์: 140734032078064
ํจ์ ์คํ ํ ๊ฐ:10, ์ฃผ์: 140734032077744
'''
# mmutable: list, dict, set
def mu(b):
b.append(20)
print(f'ํจ์์ ๋ฃ๊ณ ๋ฐ๊พผ ๊ฐ: {b}, ์ฃผ์: {id(b)}')
return b
b = [10]
print(f'์ด๊ธฐ ๊ฐ: {b}, ์ฃผ์: {id(b)}')
mu(b)
print(f'ํจ์ ์คํ ํ ๊ฐ:{b}, ์ฃผ์: {id(b)}')
'''
์ด๊ธฐ ๊ฐ: [10], ์ฃผ์: 2389478957704
ํจ์์ ๋ฃ๊ณ ๋ฐ๊พผ ๊ฐ: [10, 20], ์ฃผ์: 2389478957704
ํจ์ ์คํ ํ ๊ฐ:[10, 20], ์ฃผ์: 2389478957704
'''
- immutable์ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ์ฃผ์๊ฐ ๋ค๋ฅด๊ณ , mutable์ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ์ฃผ์๊ฐ ๊ฐ์ ๊ฒ์ ๋ณผ ์ ์๋ค.
- ๊ฐ ๋ํ ๋ฌ๋ผ์ง ๊ฒ์ ํ์ธํ ์ ์๋ค
๋ฐ์ํ
'CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ปดํ์ผ ์ธ์ด vs ์ธํฐํ๋ฆฌํฐ ์ธ์ด (0) | 2020.10.10 |
---|