๐จโ๐ป๐ย [Python] List & Tuple
๐๏ธย 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
์ฌ์ฉ์ ๊ถ์ฅํ๋ ์ด์ ๋ค.
Leave a comment