Updated:

๐Ÿ—‚๏ธย Concept of Array in Python

C, C++, Java ๊ฐ™์€ ์–ธ์–ด๋ฅผ ๋ฐฐ์šธ ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ์šฐ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ”๋กœ ๋ฐฐ์—ด์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ด์ฌ์„ ๋ฐฐ์šธ ๋•Œ๋Š” ์กฐ๊ธˆ ์–‘์ƒ์ด ๋‹ค๋ฅด๋‹ค. ๋ฐฐ์—ด์ด๋ผ๋Š” ํ‘œํ˜„์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์–ธ๊ธ‰๋„ ์—†๊ณ  ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ๋”•์…”๋„ˆ๋ฆฌ์™€ ๊ฐ™์€ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐฐ์šฐ๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํŒŒ์ด์ฌ์— ๋ฐฐ์—ด์€ ์—†๋Š” ๊ฒƒ์ผ๊นŒ??

๋ฐ˜์€ ๋งž๊ณ  ๋ฐ˜์€ ํ‹€๋ฆฐ ์งˆ๋ฌธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์—„๋ฐ€ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ์•ž์— ๋‚˜์—ดํ•œ ์–ธ์–ด๋“ค๊ณผ ๋™์ผํ•œ ๊ฐœ๋…์˜ ๋ฐฐ์—ด์€ ํŒŒ์ด์ฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•ž์˜ ์–ธ์–ด์—์„œ ๋ฐฐ์—ด์ด๋ž€ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ๊ฐ’์„ ์ง์ ‘ ๋‹ด๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ˆœ์ˆ˜ํ•œ ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด์€ ๊ฐ’์„ ์ง์ ‘ ๋‹ด์ง€ ์•Š๊ณ , ๊ฐ’์˜ ๋ž˜ํผ๋Ÿฐ์Šค๋ฅผ ๋‹ด๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ’ ๋Œ€์‹  ๊ฐ’์ด ์œ„์น˜ํ•œ ๊ณณ์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋•๋ถ„์— ํŒŒ์ด์ฌ์€ ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, type casting ์—์„œ ์ž์œ ๋กญ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฐ์—ด์„ ์„ ์–ธํ•  ๋•Œ ๋ฏธ๋ฆฌ ๋ฐฐ์—ด์˜ ์ž๋ฃŒํ˜•์„ ์„ ์–ธํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋‹จ์ ๋„ ๋ช…ํ™•ํ•˜๋‹ค. ๊ฐ’ ๋Œ€์‹  ์ฃผ์†Œ๋ฅผ ๋‹ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜๊ฐ’์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ•œ๋‹จ๊ณ„๋ฅผ ๋” ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๋‹ค๋‹ฅ๋‹ค๋‹ฅ ๋ถ™์–ด ์žˆ์„ ํ•„์š”๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ , ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์—ฌ๊ธฐ ์ €๊ธฐ์— ํฉ์–ด์ ธ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ๋‹ค๋‹ฅ๋‹ค๋‹ฅ ์„œ๋กœ ๋ถ™์–ด ์žˆ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋ฐฐ์—ด๋ณด๋‹ค ๋™์ž‘ ์†๋„๋Š” ํ•„์—ฐ์ ์œผ๋กœ ๋Š๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๋ฐฐ์—ด์˜ ๋™์ž‘ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ๋„˜ํŒŒ์ด๋‚˜, ํŒŒ์ดํ† ์น˜, ํ…์„œํ”Œ๋กœ์™€ ๊ฐ™์€ ์ˆ˜ํ•™ ์—ฐ์‚ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” C/C++์˜ ๋ฐฐ์—ด์„ ํŒŒ์ด์ฌ API๋กœ ํ˜ธ์ถœํ•˜๋Š” ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ๋•๋ถ„์— ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ๋ฐฐ์—ด ์ž๋ฃŒ๊ตฌ์กฐ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅธ ๋™์ž‘์†๋„๋ฅผ ์ž๋ž‘ํ•œ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ํŒŒ์ด์ฌ์˜ ๋ฐฐ์—ด์— ํ•ด๋‹น๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ณตํ†ต์ ์ธ ํŠน์ง•์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์•˜๋‹ค. ํŒŒ์ด์ฌ์—์„œ ๋ฐฐ์—ด ์—ญํ• ์„ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฌด์—‡์ด ์žˆ์„๊นŒ?? ๋ฐ”๋กœ ๋ฆฌ์ŠคํŠธ์™€ ํŠœํ”Œ์ธ๋ฐ, ๋ฆฌ์ŠคํŠธ๋Š” mutable(dynamic) array, ํŠœํ”Œ์€ immutable(static) array ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. ๋ฆฌ์ŠคํŠธ๋Š” ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด, ํŠœํ”Œ์€ ์„ ์–ธ ์ดํ›„ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€ํ•œ ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋•๋ถ„์— ๊ฐ์ฒด ๋‚ด๋ถ€์— ๋‚ด์žฅ๋œ ๋งค์ง ๋ฉ”์„œ๋“œ์— ์ฐจ์ด๊ฐ€ ์ƒ๊ธด๋‹ค.

์ „์ž๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Resize() ์—ฐ์‚ฐ์„ ์œ„ํ•ด ๋ณ„๋„์˜ ๋งค์ง ๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ๋‚ด๋ถ€์— ์ €์žฅํ•œ๋‹ค. ํ•œํŽธ, ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ๊ฐ ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ์— ๋„ฃ๋”๋ผ๋„ ๋ฆฌ์ŠคํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ํฌ๊ฒŒ ์žกํžˆ๊ฒŒ ๋œ๋‹ค. ๊ทธ ์ด์œ ๋Š” mutable ํ•œ ํŠน์„ฑ์„ ๊ณ ๋ คํ•ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์„ ์œ„ํ•ด ์ปค๋„๊ณผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฌ์œ ๋ถ„๊นŒ์ง€ ์ถ”๊ฐ€ํ•ด๋‘๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ˜๋ฉด ํŠœํ”Œ์€ ์„ ์–ธ ์‹œ์ ์— ๊ณ ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋Ÿฐํƒ€์ž„ ๋•Œ ์ปค๋„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์šด์˜์ฒด์ œ๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ๋ณด๋‹ค ๋น ๋ฅด๋‹ค. ๋˜ํ•œ ํฌ๊ธฐ๊ฐ€ 20 ์ดํ•˜์˜ ํŠœํ”Œ์ด๋ผ๋ฉด ์ตœ๋Œ€ 2๋งŒ๊ฐœ๊นŒ์ง€๋Š” ๋ž˜ํผ๋Ÿฐ์‹ฑ์ด ํ’€๋ ค๋„ python gc(๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ) ๊ฐ€ ๊ณง๋ฐ”๋กœ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์บ์‹œ์— ์ €์žฅํ•ด๋‘”๋‹ค. ๋•Œ๋ฌธ์— ๊ฐ™์€ ํฌ๊ธฐ์˜ ํŠœํ”Œ์ด ๋‹ค์‹œ ํ•„์š”ํ•ด์ง€๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒˆ๋กœ์ด ํ• ๋‹นํ•  ํ•„์š” ์—†์ด ์ €์žฅ๋˜์–ด ์žˆ๋˜ ํŠœํ”Œ์„ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค. ๋ฆฌ์ŠคํŠธ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๊ฐ€ ์šด์˜์ฒด์ œ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ตฌ๊ฑธํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŠœํ”Œ์˜ ์ƒ์„ฑ ๋ฐ ํ• ๋‹น ์†๋„๊ฐ€ ํ›จ์”ฌ ๋นจ๋ผ์ง„๋‹ค.

๋”ฐ๋ผ์„œ ์ €์žฅํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ(๊ฐ€๋ณ€, ๋ถˆ๋ณ€)์„ ์ž˜ ํŒŒ์•…ํ•ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ํŒŒ์ด์ฌ ์ฝ”๋“œ์˜ ์„ฑ๋Šฅ ๊ฐœ์„ ์— ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ์ด์ œ๋ถ€ํ„ฐ๋Š” ๋ฆฌ์ŠคํŠธ์™€ ํŠœํ”Œ ๊ฐ๊ฐ์— ๋Œ€ํ•œ ํŠน์„ฑ์„ ์‚ดํŽด๋ณด์ž.

โญ๏ธ Features of list

์•ž์„œ ๋ฆฌ์ŠคํŠธ๋Š” array + resize() ์ด๋ผ๊ณ  ์–ธ๊ธ‰ํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋™์  ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด์ž. ๋ฆฌ์ŠคํŠธ๋Š” ๋™์  ๋ฐฐ์—ด์ด๋ผ๊ณ  ์ด๋ฆ„ ๋ถ™์—ˆ์ง€๋งŒ ์‚ฌ์‹ค ์ง„์งœ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ํŠœํ”Œ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„ ์–ธ ์‹œ์ ์— ํŠน์ •ํ•œ ํฌ๊ธฐ์— ๋งž๋Š” ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค. ๋‹ค๋งŒ ์ดํ›„ ์ˆ˜์ •๋  ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ผ๋„ ์ข€ ๋” ํฐ ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›์„ ๋ฟ์ด๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ์ž…๋ ฅ $A$์— ๋Œ€ํ•ด์„œ ํŠœํ”Œ์ด $N$์˜ ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค๋ฉด, ๊ฐ™์€ ์ž…๋ ฅ์— ๋Œ€ํ•ด ๋ฆฌ์ŠคํŠธ๋Š” $M (M >N)$์˜ ๊ณต๊ฐ„์„ ํ• ๋‹น ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ, ๋ฆฌ์ŠคํŠธ์˜ ์ „์ฒด ๊ณต๊ฐ„ ํฌ๊ธฐ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋Š˜๋ฆฌ์ง€ ์•Š๊ณ  ๋‚จ์€ ๊ณต๊ฐ„($M-N)$์— ํ• ๋‹น๋งŒ ํ•˜๋‹ค๊ฐ€, $N==M$์ด ๋˜๋Š” ์‹œ์ ์— ๋” ์ด์ƒ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ํฌ๊ธฐ๊ฐ€ $M$๋ณด๋‹ค ํฐ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•œ๋‹ค. ๊ทธ ๋‹ค์Œ ๊ธฐ์กด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹นํ•œ ๋ฆฌ์ŠคํŠธ์— ๋ณต์‚ฌํ•œ ๋’ค, ๋ž˜ํผ๋Ÿฐ์‹ฑ์ด ์‚ฌ๋ผ์ง„ ์ด์ „ ๋ฆฌ์ŠคํŠธ๋Š” python gc ๊ฐ€ ์‚ญ์ œํ•œ๋‹ค.

""" Time Consuming """
>>> %timeit [[i*j for j in range(10000)] for i in range(10000)]
3.85 s ยฑ 44.5 ms per loop (mean ยฑ std. dev. of 7 runs, 1 loop each)

>>> %timeit t = []
>>> for i in range(10000):
>>>     for j in range(10000):
>>>         t.append(i*j)
13.3 ns ยฑ 0.0774 ns per loop (mean ยฑ std. dev. of 7 runs, 100,000,000 loops each)

""" Memory Consuming """
>>> %memit [[i*j for j in range(10000)] for i in range(10000)]
peak memory: 4323.73 MiB, increment: 3161.28 MiB

>>>  %memit t = []
>>>  for i in range(10000):
>>>     for j in range(10000):
>>>         t.append(i*j)
peak memory: 1297.91 MiB, increment: 0.02 MiB

์ •๋ฆฌํ•˜๋ฉด, ๋ฆฌ์ŠคํŠธ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์ƒ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ ์–‘๋ณด๋‹ค ์ผ๋ถ€๋Ÿฌ ์ข€ ๋” ๋งŽ์ด ๋•ก๊ฒจ๋†“๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ ํ•˜๋‹ค๊ฐ€ ๋นˆ๊ณต๊ฐ„์ด ์—†์œผ๋ฉด ๋” ํฐ ๊ณต๊ฐ„์— ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒˆ๋กญ๊ฒŒ ํ• ๋‹นํ•ด ๋™์ ์ธ ์†์„ฑ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฏธ ์„ ์–ธ๋œ ๋ฆฌ์ŠคํŠธ(ํŠนํžˆ ๊ฝ‰์ฐฌ)์— append() ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์žฌํ• ๋‹น์ด ์ง€์†์ ์œผ๋กœ ์ผ์–ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋„ ๋งŽ์ด ์žก์•„๋จน๊ณ  ์ƒ์„ฑ ์‹œ๊ฐ„๋„ ๋งค์šฐ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค. ์ด๊ฒƒ์ด ํŒŒ์ด์ฌ์—์„œ list comprehension ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•˜๋Š” ์ด์œ ๋‹ค.

โญ๏ธ Features of tuple

Leave a comment