๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

 

๋ฆฌ์ŠคํŠธ ๋ณต์‚ฌํ•˜๊ธฐ

 

๋ณ€์ˆ˜๋Š” ๊ฐ์ฒด๋ฅผ ๋‹ด๋Š” ๊ทธ๋ฆ‡์ด ์•„๋‹ˆ๋ผ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋ฉด ๋‘ ๋ณ€์ˆ˜๋Š” ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๋‘ ๊ฐœ์˜ ์ด๋ฆ„์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด์ง€ ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ๋‘ ๊ฐœ๊ฐ€ ๋œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๋ณ€ํ˜• ๊ฐ์ฒดimmutable object์—์„œ๋Š” ํ•œ ๋ณ€์ˆ˜์— ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ž…ํ•ด๋„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์ง€๋งŒ, ๋ฆฌ์ŠคํŠธ ๊ฐ™์€ ๋ณ€ํ˜• ๊ฐ์ฒดmutable object์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์žฅ์ ์ด ๋˜๊ธฐ๋„ ํ•˜๊ณ , ๋‹จ์ ์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ์„  ์—ฌ๊ธฐ๊นŒ์ง€ ์ฝ”๋“œ๋กœ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

>>> mu_a = [2020, 'year']
>>> mu_b = mu_a
>>> mu_b.append(['hi', 'hello'])
>>> mu_a
[2020, 'year', ['hi', 'hello']]

 

์–•์€ ๋ณต์‚ฌ

 

๋ฆฌ์ŠคํŠธ๋Š” ๋ณ€ํ˜• ๊ฐ์ฒด์ด๋ฏ€๋กœ mu_b๋ฅผ ๋ฐ”๊ฟ”๋„ mu_a๊นŒ์ง€ ๋ฐ”๋€๋‹ˆ๋‹ค. mu_a๋‚˜ mu_b๋‚˜ ๊ฐ™์€ ๋ณ€ํ˜• ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋™์ž‘์„ ์›ํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋‘ ๊ฐœ๋กœ ๋ณต์‚ฌํ•˜๊ณ , ์ด ๋‘˜์„ ๊ฐ๊ฐ mu_a์™€ mu_b๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•  ์ˆ˜๋Š” ์—†์„๊นŒ์š”? ๋ฐ”๋กœ ์ด๊ฒƒ์ด ์–•์€ ๋ณต์‚ฌshallow copy์˜ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ ๋ฉ”์„œ๋“œ ๊ฐ€์šด๋ฐ copy()๊ฐ€ ์–•์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

>>> mu_a = [2020, ['hi', 'hello']]
>>> mu_b = mu_a.copy()

 

์—ฌ๊ธฐ์„œ mu_a์™€ mu_b๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‘ ๊ฐœ์˜ ์ด๋ฆ„์ด ์•„๋‹™๋‹ˆ๋‹ค. id() ๋˜๋Š” is ์—ฐ์‚ฐ์ž๋กœ ๋‘˜์„ ๋น„๊ตํ•˜๋ฉด False๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

>>> mu_a is mu_b
False

 

ํ•˜์ง€๋งŒ ์š”์†Œ๋“ค์˜ ์ •์ฒด์„ฑ์€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

>>> mu_a[0] is mu_b[0]
True
>>> mu_a[1] is mu_b[1]
True

 

๊ทธ๋ฆฌ๊ณ  mu_b๋ฅผ ๋ฐ”๊พธ๋”๋ผ๋„ mu_a๋Š” ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด๊ฒƒ์ด ์–•์€ ๋ณต์‚ฌ์˜ ํŠน์ง•์ž…๋‹ˆ๋‹ค.

 

>>> mu_b.append('year')
>>> mu_b
[2020, ['hi', 'hello'], 'year']
>>> mu_a
[2020, ['hi', 'hello']]

 

์–•์€ ๋ณต์‚ฌ์—๋Š” ํ•œ ๊ฐ€์ง€ ํ—ˆ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์†Œ ์ž์ฒด์˜ ์ •์ฒด์„ฑ์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์š”์†Œ๊ฐ€ ๋ณ€ํ˜• ๊ฐ์ฒด์ด๋ฉด ๋ณ€ํ˜• ๊ฐ์ฒด์˜ ํŠน์„ฑ์„ ๋”ฐ๋ฅธ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณผ๊นŒ์š”?

 

>>> mu_b[1][1] = 'bye'
>>> mu_b
[2020, ['hi', 'bye'], 'year']
>>> mu_a
[2020, ['hi', 'bye']]

 

mu_b[1]์ด ๋ฆฌ์ŠคํŠธ๋ผ์„œ ๋ณ€ํ˜• ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— mu_b[1][1]์„ ๋ฐ”๊พธ์—ˆ์ง€๋งŒ mu_a[1][1]๋„ ๋ฐ”๋€ ๊ฒ๋‹ˆ๋‹ค.

 

 

 

๊นŠ์€ ๋ณต์‚ฌ

 

์ด๋ฅผ ๋ณด์™„ํ•œ ๋ณต์‚ฌ๊ฐ€ ๊นŠ์€ ๋ณต์‚ฌdeep copy์ž…๋‹ˆ๋‹ค. ๊นŠ์€ ๋ณต์‚ฌ๋Š” ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ ๋ณ€ํ˜•์„ฑ์„ ๋”ฐ์ง‘๋‹ˆ๋‹ค. ๋ถˆ๋ณ€ํ˜• ๊ฐ์ฒด๋Š” ์ •์ฒด์„ฑ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๊ณ , ๋ณ€ํ˜• ๊ฐ์ฒด๋Š” ์ƒˆ ์œ„์น˜์— ์ƒˆ๋กœ ๋งŒ๋“œ๋Š” ๊ฑฐ์ฃ . ๋”ฐ๋ผ์„œ ์–ด๋Š ํ•œ์ชฝ์„ ์ˆ˜์ •ํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ํ•˜๋‚˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์—์„œ ๊นŠ์€ ๋ณต์‚ฌ๋Š” copy ๋ชจ๋“ˆ์˜ deepcopy()๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

>>> import copy
>>> mu_a = [2020, ['hi', 'hello']]
>>> mu_b = copy.deepcopy(mu_a)
>>> mu_a is mu_b
False
>>> mu_a[0] is mu_b[0]
True
>>> mu_a[1] is mu_b[1]
False

 

๋ถˆ๋ณ€ํ˜• ๊ฐ์ฒด๋Š” ๋ณ€ํ˜•๋  ์ˆ˜ ์—†์œผ๋‹ˆ ์ •์ฒด์„ฑ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™”๊ณ , ๋ณ€ํ˜• ๊ฐ์ฒด๋Š” ๋ฏธ์—ฐ์˜ ์‚ฌ๊ณ ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

 

>>> mu_b[1][1] = 'bye'
>>> mu_b
[2020, ['hi', 'bye']]
>>> mu_a
[2020, ['hi', 'hello']]

 

์ด๋ ‡๋“ฏ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ๋Š” ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ณต์‚ฌ์™€ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์„ธ์ƒ ๋ชจ๋“  ๊ฒƒ์—๋Š” ์žฅ์ ์ด ์žˆ์œผ๋ฉด ๋‹จ์ ๋„ ์žˆ๋Š” ๋ฒ•, ๊นŠ์€ ๋ณต์‚ฌ์—๋„ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋น„์‹ธ๊ณ  ๋Š๋ฆฌ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค. ๋น„์‹ธ๋‹ค๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์„ ๋งŽ์ด ์†Œ๋น„ํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋Š๋ฆฌ๋‹ค๋Š” ๊ฒƒ์€ ์–•์€ ๋ณต์‚ฌ์— ๋น„ํ•ด ๊ทธ๋ ‡๋‹ค๋Š” ๊ฑฐ์ฃ .

 

๋งˆ์ง€๋ง‰์œผ๋กœ ํ•œ๋งˆ๋”” ๋ง๋ถ™์ด์ž๋ฉด, ํŒŒ์ด์ฌ์—๋Š” ์–•์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ณ„๋„๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ˆˆ์น˜์ฑ˜์„์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ copy ๋ชจ๋“ˆ์˜ copy()์ž…๋‹ˆ๋‹ค. list ๋ชจ๋“ˆ์˜ copy()๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฆฌ์ŠคํŠธ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์ง€๋งŒ, copy ๋ชจ๋“ˆ์˜ copy()์™€ deepcopy()๋Š” ๊ฐ์ฒด์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•
profile on loading

Loading...