๋ฌธ์ ๋ฅผ ํ๋ค ๋ณด๋ฉด ๊ธฐ์กด์ ๋ฆฌ์คํธ๋ฅผ ๋ณด์กดํ๊ธฐ ์ํด ๋ณต์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด๋ด๋ ์๋ชป ๋ณต์ฌํ๊ฒ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ ๊ฐ์ด ๋ณต์ฌ๋์ด์ ์๋ ์๋ ๋ฐฐ์ด์ ๊ฑด๋๋ฆฌ๊ฒ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ค.
๋ฐ๋ผ์ ๋ณต์ฌํ ๋ ํ์ํ ๊น์๋ณต์ฌ์ ๋ํด ์์๋ณด๊ณ ์ ํ๋ค.
mutable, immutable
ํ์ด์ฌ์์ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ค.
์ฌ๊ธฐ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ ๊ฐ์ฒด๋ mutable, ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๋ immutable์ด๋ผ๊ณ ํ๋ค.
class | ๊ตฌ๋ถ |
list | mutable |
set | mutable |
dict | mutable |
bool | immutable |
int | immutable |
float | immutable |
tuple | immutable |
str | immutable |
mutable๊ณผ immutable
mutable๊ณผ imutable ์ฐจ์ด
mutableํ ๊ฐ์ฒด์ ๊ฒฝ์ฐ
>>> a = [1, 2, 3]
>>> b = a # shallow copy
>>> b[0]= 5
>>> a
[5, 2, 3]
>>> b
[5, 2, 3]
>>> id(a)
4396179528
>>> id(b)
4396179528
- b์ a๋ฅผ ํ ๋นํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๊ฐ๋ค
- b๋ฅผ ๋ณ๊ฒฝํ๋ฉด a๋ ๋ณ๊ฒฝ
immutableํ ๊ฐ์ฒด์ ๊ฒฝ์ฐ
>>> a = "abc"
>>> b = a
>>> a
'abc'
>>> b
'abc'
>>> id(a)
4387454680
>>> id(b)
4387454680
>>> b = "abcd"
>>> a
'abc'
>>> b
'abcd'
>>> id(a)
4387454680
>>> id(b)
4396456400
- ๋ฆฌ์คํธ์ ๋๊ฐ์ด b์ a๋ฅผ ํ ๋นํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๊ฐ๋ค
- ํ์ง๋ง b์ ๋ค๋ฅธ๊ฐ์ ํ ๋นํ๋ฉด ์ฌํ ๋น์ด ์ด๋ฃจ์ด์ง๋ฉฐ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋ณ๊ฒฝ๋จ
์์ ๋ณต์ฌ
>>> a = [1,2,3]
>>> b = a[:]
id(a)์ id(b)๊ฐ ๋ค๋ฆ
>>> b[0] = 5
>>> a
[1,2,3]
>>> b
[5,2,3]
- list ์ฌ๋ผ์ด์ฑ์ ํตํด ์๋ก์ด ๊ฐ์ ํ ๋น๋ฐ์๋ค.
- ์ด์ ๊ฐ์ ๊ฒฝ์ฐ ์๋ก์ด id๋ฅผ ๋ฐ์์ ์๋ก ์ํฅ์ ๋ฐ์ง ์๋๋ค.
>>> a = [[1,2],[3,4]]
>>> b = a[:]
>>> id(a)
4395624328
>>> id(b)
4396179592
>>> id(a[0])
4396116040
>>> id(b[0])
4396116040
- ํ์ง๋ง ๋ฆฌ์คํธ์์ ๋ฆฌ์คํธ, mutable์์ mutable๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋๋ค.
- id(a)๊ฐ๊ณผ id(b)๊ฐ์ ๋ค๋ฅด์ง๋ง, ๋ด๋ถ์ id(a[0])๊ณผ id(b[0])์ ๊ฐ์ ์ฃผ์.
- a[1]์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด b1๋ ๋ฐ๋ผ๋ณ๊ฒฝ๋จ
>>> a[1].append(5)
>>> a
[[8, 9], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]
>>> id(a[1])
4396389896
>>> id(b[1])
4396389896
- copy๋ํ ์์ ๋ณต์ฌ
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.copy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4, 5]]
๊น์ ๋ณต์ฌ (deepcopy ์ด์ฉ)
- ๊น์ ๋ณต์ฌ๋ ๋ด๋ถ์ ๊ฐ์ฒด๋ค๊น์ง ๋ชจ๋ copy๋๋ค.
- copy.deepcopy() ์ฌ์ฉํ๋ฉด ๋จ.
>>> import copy
>>> a = [[1,2],[3,4]]
>>> b = copy.deepcopy(a)
>>> a[1].append(5)
>>> a
[[1, 2], [3, 4, 5]]
>>> b
[[1, 2], [3, 4]]
๋ ๋ค๋ฅธ ๊น์ ๋ณต์ฌ(slicing ์ด์ฉ)
a = [[1, 2], [3, 4]]
b = [arr[:] for arr in a]
- ๋งค์ฐ ๊ฐ๋จํ๋ค.
- ์๊ฐ๋ deepcopy๋ชจ๋์ ์ฌ์ฉํ๋๊ฒ๋ณด๋ค ๋น ๋ฅด๋ค๊ณ ํ๋ค.
- ์์ผ๋ก deepcopy๋์ slicing์ ์ฌ์ฉ ํด์ผ๊ฒ ๋ค.
์ฐธ๊ณ
'๐ Language > [python]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์ด์ฌ] sort (feat. lambda) (0) | 2022.08.02 |
---|---|
[ํ์ด์ฌ] 0100110๊ณผ ๊ฐ์ด 0์ด ๋ถ์ด์ ์ ๋ ฅ๋ ๋ (0) | 2022.08.02 |
[ํ์ด์ฌ] RecursionError๊ฐ ๋ฐ๋, ์ ๋ ฅ์ ๋ฐ์๋ - sys (0) | 2022.08.01 |
[ํ์ด์ฌ] ๋ฆฌ์คํธ๋ฅผ ๋ฌธ์์ด๋ก - join (0) | 2022.08.01 |
[ํ์ด์ฌ] break, continue, pass, exit (0) | 2022.07.31 |