
ํ ๋ฒ์ ์ดํดํ๋ ํ์ด์ฌ โ๋ฌธ์์ด ์๋ฅด๊ธฐ(Slicing)โ
ํ ๋ฒ์ ์ดํดํ๋ ํ์ด์ฌ โ๋ฌธ์์ด ์๋ฅด๊ธฐ(Slicing)โ ๊ด๋ จ
ํ์ด์ฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ ๊ณผ์ ์์ ๋ชฉ์ ์ ๋ฐ๋ผ, ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ์ค์์๋ ๋ฌธ์์ด ์๋ฅด๊ธฐ(์ฌ๋ผ์ด์ฑ, Slicing)์ ๋ฐ์ดํฐ์ ํํ๋ ๋๋ฉ์ธ๊ณผ ๊ด๊ณ์์ด ํต์ฌ์ ์ธ ์ญํ ์ ์ํํ์ฃ . ์ฌ์ฉ์๋ ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์ ํตํด ๋ฌธ์์ด์ ํน์ ๋ถ๋ถ์ ํจ์จ์ ์ผ๋ก ์ถ์ถํ๊ฑฐ๋, ์กฐ์ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฐ์ดํฐ ๋ถ์, ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ, ์๋ํ ์คํฌ๋ฆฝํธ ๋ฑ ๋ค์ํ ์์ญ์์ ํ์์ ์ธ ๊ธฐ์ ๋ก ์ฐ์ ๋๋ค.
ํ์ด์ฌ์ ์ฌ์ฉํด ๋ฌธ์์ด์ ์ผ๋ถ๋ถ์ ์๋ผ๋ด๋ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๊ตฌ์ฒด์ ์ธ ์๋ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์์ด ๊ฒฐ์ ์ ์ธ ์ฐจ์ด๋ฅผ ๋ง๋ญ๋๋ค. ์ด๋ฒ ๊ธ์์๋ ํ์ด์ฌ์ ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ๋ถํฐ, C์ธ์ด๋ก ๊ตฌํ๋ CPython์ ๋ด๋ถ ๋ก์ง๊น์ง ๊น๊ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.

๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ ์ฌ์ฉ ๋ฐฉ๋ฒ
์ฐ์ ํ์ด์ฌ ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์ ์ฝ๋ก (:)์ ์ฌ์ฉํ์ฌ, ๋ฌธ์์ด์ ์ผ๋ถ๋ถ์ ์ ํํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ์ ์ค๋ธ์ ํธ[์์:๋:์ฆ๊ฐ]
** ํํ๋ฅผ ๊ฐ์ง๋ฉฐ, ๊ฐ ์ธ๋ฑ์ค(์์)๋ ์ฌ๋ผ์ด์ค์ ๋ฒ์๋ฅผ ์ ์ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์์(start) ์ธ๋ฑ์ค๋ ์ฌ๋ผ์ด์ค๊ฐ ์์๋๋ ์์น๋ฅผ ๋ํ๋ ๋๋ค. ์ฃผ์ํ ์ ์ผ๋ก, ์ด ์์น์ ํด๋นํ๋ ๋ฌธ์๋ ์ฌ๋ผ์ด์ค ๊ฒฐ๊ณผ๋ฌผ์ ํฌํจ๋ฉ๋๋ค. ๋ง์ฝ ์์ ์ธ๋ฑ์ค๊ฐ ์๋ต๋๋ฉด ํ์ด์ฌ์ 0์ ๊ฐ์ผ๋ก ์ฌ์ฉ, ์ฆ, ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ์ฌ๋ผ์ด์ค๋ฅผ ์์ํฉ๋๋ค.
์ด์ด์ ๋(end) ์ธ๋ฑ์ค๋ ์ฌ๋ผ์ด์ค๊ฐ ๋๋๋ ์์น๋ฅผ ๋ํ๋ ๋๋ค. ์์ ์ธ๋ฑ์ค์์ ์ฐจ์ด์ ์ผ๋ก ์ด ์์น์ ํด๋นํ๋ ๋ฌธ์๋ ์ฌ๋ผ์ด์ค ๊ฒฐ๊ณผ์ ํฌํจ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ ์ธ๋ฑ์ค๊ฐ ์ฃผ์ด์ง์ง ์๋๋ค๋ฉด, ์ฌ๋ผ์ด์ค๋ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋ฌธ์๊น์ง ํฌํจํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์คํ (step) ๊ฐ์ ์ฌ๋ผ์ด์ค ๊ณผ์ ์์ ๋ฌธ์๋ฅผ ๊ฑด๋๋ธ ๊ฐ๊ฒฉ์ ์ง์ ํฉ๋๋ค. ์ด ๊ฐ์ ์ ํ ์ฌํญ์ด๋ฉฐ, ์ ๋ ฅ๋์ง ์๋๋ค๋ฉด 1์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ฌธ์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ํํฉ๋๋ค.
์ด์ด์ ์์ ๋ฐ ์์ ์ธ๋ฑ์ค๋ฅผ ํ์ฉํ ์ฌ๋ผ์ด์ฑ ์์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค.
- ์์ ์ธ๋ฑ์ค: ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ์ธ๋ฑ์ฑํ๋ฉฐ,
0
๋ถํฐ ์์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์์ดs = โyozm.wishket.comโ
์์s[5:12]
๋ ์ธ๋ฑ์ค5
('w')๋ถํฐ11
('t')๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด"wishket"
์ ๋ฐํํฉ๋๋ค. - ์์ ์ธ๋ฑ์ค: ๋ฌธ์์ด์ ๋์์๋ถํฐ ์ธ๋ฑ์ฑํ๋ฉฐ,
-1
๋ถํฐ ์์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ผํ ๋ฌธ์์ด s์์s[-6:-1]
๋ ๋ค์์ 6๋ฒ์งธ ๋ฌธ์('e')๋ถํฐ ๋ค์์ 2๋ฒ์งธ ๋ฌธ์('o')๊น์ง์ ๋ถ๋ถ ๋ฌธ์์ด"et.co"
๋ฅผ ๋ฐํํฉ๋๋ค.

์คํ ์ ์ฌ์ฉํ๋ฉด ๋์ฑ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋ฌธ์์ด์ ์ฌ๋ผ์ด์คํ ์ ์์ต๋๋ค.
- ์์ ์คํ
:
s[2:8:2]
๋ ์ธ๋ฑ์ค 2๋ถํฐ 8๊น์ง 2๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋ฌธ์๋ฅผ ์ถ์ถํ์ฌ "z.i"๋ฅผ ๋ฐํํฉ๋๋ค. - ์์ ์คํ
:
s[6:1:-2]
๋ ์ธ๋ฑ์ค 6๋ถํฐ 1๊น์ง ์ญ์์ผ๋ก 2๊ฐ ๊ฐ๊ฒฉ์ผ๋ก ๋ฌธ์๋ฅผ ์ถ์ถํ์ฌ "i.z"๋ฅผ ๋ฐํํฉ๋๋ค. ํนํ,s[::-1]
๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ ์ ์ฒด๋ฅผ ์ญ์์ผ๋ก ์ฌ๋ผ์ด์คํ์ฌ "moc.tekhsiw.mzoy"๋ฅผ ์ป์ ์ ์์ต๋๋ค.

๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์ ์ค์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ํ์ฉ๋ ์ ์์ผ๋ฉฐ, ๋ช ๊ฐ์ง ๊ตฌ์ฒด์ ์ธ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํน์ ํจํด ์ถ์ถ: ํ์ผ ๊ฒฝ๋ก์์ ํ์ผ๋ช
์ด๋ ํ์ฅ์๋ฅผ ์ถ์ถํ๊ฑฐ๋, URL์์ ํน์ ๋ถ๋ถ์ ๋ถ๋ฆฌํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ผ ๊ฒฝ๋ก
C:/Users/Public/Documents/
report.pdf
์์ ํ์ผ๋ช "report"๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ์ฌ๋ผ์ด์ฑ์ ํ์ฉํ ์ ์์ต๋๋ค. - ๋ฌธ์์ด ์ผ๋ถ ์์ (์๋ก์ด ๋ฌธ์์ด ์์ฑ): ํ์ด์ฌ ๋ฌธ์์ด์ ๋ถ๋ณ(immutable)ํ๋ฏ๋ก, ์ฌ๋ผ์ด์ฑ์ ํตํด ๊ธฐ์กด ๋ฌธ์์ด์ ์ผ๋ถ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฌธ์์ด "Hello"์ ์ฒซ ๊ธ์๋ฅผ
"J"
๋ก ๋ฐ๊พธ๋ ค๋ฉด,"J" + "Hello"[1:]
์ ๊ฐ์ด ์ฌ๋ผ์ด์ฑ๊ณผ ๋ฌธ์์ด ์ฐ๊ฒฐ์ ์ฌ์ฉํด์ผ๋ง ํฉ๋๋ค. - ๋ฌธ์์ด ์ญ์ ๋ง๋ค๊ธฐ: ํ
์คํธ ๋ถ์์ด๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ฌธ์์ด์ ์ญ์์ผ๋ก ์ ๋ ฌํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์์ ์๊ฐํ
[::-1]
์ฌ๋ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐํธํ๊ฒ ๋ฌธ์์ด์ ๋ค์ง์ ์ ์์ต๋๋ค.
๋ถ๋ณ ๋ฌธ์์ด ๊ฐ์ฒด
๋ถ๋ณ์ด๋ ์๋์ ์ค๋ธ์ ํธ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ง์ฝ s = โwww.wishket.comโ
์ด๋ผ๋ ์ฝ๋๋ฅผ ์คํํ๋ฉด โyozm.wishket.comโ์์ s์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๊ธฐ์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ ๊ฒ์ผ๋ก ์คํดํ ์ ์๋๋ฐ์. ์ด๋ ๋ฉ๋ชจ๋ฆฌ์ โwww.wishket.comโ
์ด๋ผ๋ ๋ฌธ์์ด ์ค๋ธ์ ํธ๋ฅผ ์๋กญ๊ฒ ๋ง๋ค๊ณ , ์ด ์ฃผ์๋ฅผ s์ ์๋กญ๊ฒ ํ ๋นํ ๊ฒ์
๋๋ค.

๊ทธ๋ ๊ธฐ์ ๋ฌธ์์ด์ ๋ด๋ถ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋ํ ๋๋ก ๋ถ๋ณ์ ๋ณ๊ฒฝํ๋ ๊ณผ์ ์์์ ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.

์ด ๋ถ๋ณ์ ๊ฐ๋ ์ด ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์์ ์ค์ํ ์ด์ ๋, ์ฌ๋ผ์ด์ฑ ๋ํ ๋ถ๋ณ์ธ ์๋ณธ ๋ฌธ์์ด์ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด์, ๋ฌธ์์ด์ ์ผ๋ถ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๋ฌธ์์ด์ ๋ง๋๋ ์์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ํ์ด์ฌ, ์๋ฐํ๋ CPython์์๋ ๊ฐ๋ฅํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๋ฅผ ํผํ๊ณ , ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ์ ์ค์ด๊ธฐ ์ํ ์ฌ๋ฌ ์ต์ ํ ์ ๋ต๋ค์ด ์ฝ๋์ ๋ น์์์ต๋๋ค. ์ด์ ์ค์ ๋ก CPython์ด ์ด ์ฌ๋ผ์ด์ฑ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ๋ด๋ถ ์ฝ๋์ ํจ๊ป ์์๋ณด๊ฒ ์ต๋๋ค.
ํ์ด์ฌ ํ
์คํธ ๊ฐ์ฒด์ ์ฌ๋ผ์ด์ฑ ์ฐ์ฐ์ ๊ฐ์ฒด์ __getitem__
๋ฉ์๋์ slice
๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ์ด๋ฃจ์ด์ง๋๋ค. ์ฆ, ์์ ๋ณธ s[5:12]
์ ์๋์ slice
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ ๋์ผํ ์ญํ ์ ํฉ๋๋ค.

CPython์์๋ unicode_subscript
๋ผ๋ ํจ์๋ฅผ ํตํด ์ด ๋์์ ๊ตฌํํฉ๋๋ค. ์ด ํจ์๋ ์ธ๋ฑ์ฑ๊ณผ ์ฌ๋ผ์ด์ฑ์ ๋ชจ๋ ์ฒ๋ฆฌํ๋๋ฐ, ์ ๋ฌ๋ item์ด ์ ์ ์ธ๋ฑ์ค๋ผ๋ฉด ๊ฐ๋ณ ๋ฌธ์๋ฅผ ๋ฐํํ๊ณ slice
๊ฐ์ฒด๋ผ๋ฉด ํ์ ๋ฌธ์์ด์ ๋ฐํํ๋๋ก ๋์ด ์์ต๋๋ค. (cpython ์ฝ๋ ์๋ณธ ์ฐธ๊ณ (python/cpython
))
์ด์ด์ง๋ ์ฝ๋๋ ์ฌ๋ผ์ด์ฑํ๋ ์ํฉ(slice
๊ฐ์ฒด๋ฅผ ์ฌ์ฉ)์ ํต์ฌ ๋ก์ง ์ค ์ผ๋ถ๋ก, ๋จผ์ ์ฌ๋ผ์ด์ค ๋ฒ์์ ํด๋นํ๋ ๊ธธ์ด slicelength
๋ฅผ ๊ณ์ฐํ ๋ค์, ์ด ๊ฐ์ ๋ฐ๋ผ ์ธ ๊ฐ๋์ ์ฒ๋ฆฌ๋ฅผ ํฉ๋๋ค.

1. ๋น ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ
๋ง์ฝ slicelength
๊ฐ 0 ์ดํ๋ผ๋ฉด ์ฆ, ์ฌ๋ผ์ด์ฑ ๊ฒฐ๊ณผ๊ฐ ๋น ๋ฌธ์์ด์ด๋ผ๋ฉด _Py_RETURN_UNICODE_EMPTY()
๋ฅผ ํธ์ถํฉ๋๋ค. ์ด ํจ์๋ ์ด๋ฆ์์ ์๋ฏธํ๋ฏ ๋น์ด์๋ unicode๋ฅผ ๋ฐํํ๋ ํจ์์ธ๋ฐ, ์ ์ญ์ ์ผ๋ก ๋ฏธ๋ฆฌ ์ ์๋ ๋น ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ์ฆ, ์์์ ๋ฌธ์์ด s์ ๋ํด s[1:1]
์ฒ๋ผ ์ ์ํ ์ ์๋ ๋น ๋ฌธ์์ด โโ
๋ CPython์ ๋ฏธ๋ฆฌ ํ๋๋ง ์์ฑํด ๋๊ณ , ๋ชจ๋ ๊ณณ์์ ์ฐธ์กฐํ๋ ์ฑ๊ธํค(singleton)์ด๊ธฐ ๋๋ฌธ์, ๋ถํ์ํ๊ฒ ๋งค๋ฒ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์์ต๋๋ค.

2. ์ ์ฒด ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ
start == 0
, step == 1
๊ทธ๋ฆฌ๊ณ ์๋ณธ ๋ฌธ์์ด์ ๊ธธ์ด์ slicelength
๊ฐ ๊ฐ์ ์ ์ฒด ๋ฌธ์์ด์ ์ฌ๋ผ์ด์ฑ ํ๋ ๊ฒฝ์ฐ, ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๊ณ ์๋ณธ ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ ๋๋ถ์ ์๋์ ๊ฐ์ด ๋ฌธ์์ด์ ๊ฐ์ ๊ฐ์ผ๋ก ์๋กญ๊ฒ ์ ์ํ๋ ๊ฒ์ ๋ค๋ฅธ ์ค๋ธ์ ํธ๋ก ๊ณ์ฐ๋์ง๋ง, ์ ์ฒด ๋ฌธ์์ด์ ์ฌ๋ผ์ด์ฑํ๋ ์ ์ ๋ฐฉ์์ ๊ฐ์ ์ค๋ธ์ ํธ๋ก ๊ณ์ฐ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๋ฅผ ์๋ ์ ์์ต๋๋ค.

3. ๋ถ๋ถ ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ (์ ๊ฐ์ฒด ์์ฑ)
์์ ๋ค๋ฃฌ ๋ ๊ฐ์ง ์ธ์ ์ผ๋ฐ์ ์ธ ์ฌ๋ผ์ด์ฑ์ ํ๋ ๊ฒฝ์ฐ๋ก, ์ฌ๋ผ์ด์ฑํ ๋ด์ฉ์ ๋ด์ ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ๊ฐ์ง ๋์ฌ๊ฒจ ๋ณผ ๋ถ๋ถ์ ์ฝ๋๊ฐ step == 1
์ธ ๊ฒฝ์ฐ์ step != 1
์ธ ๊ฒฝ์ฐ๋ก ๋๋๋ ๊ฒ์
๋๋ค.
step == 1
์ธ ๊ฒฝ์ฐ:PyUnicode_Substring
์ด๋ผ๋ ํจ์๋ฅผ ํตํด ์๋ณธ ๋ฌธ์์ด์start
๋ถํฐslicelenth
๋งํผ์ ์ฝ์ด๋ค์ฌ ์๋ก์ด ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ๊ณ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํฉ๋๋ค.step != 1
์ธ ๊ฒฝ์ฐ: ๋จผ์ slicelength
๋งํผ์ ๋ฒํผ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋นํ ๋ค ์๋ณธ ๋ฌธ์์ด์์ ํด๋น ์ธ๋ฑ์ค์ ๋ฌธ์๋ค์ ํ๋์ฉ ๋ณต์ฌํฉ๋๋ค. ์ด์ด ๋ฒํผ๋ก๋ถํฐ ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ฒํผ๋ฅผ ํด์ ํฉ๋๋ค.


๋ค์ ์ ๋ฆฌํ๋ฉด, ๋ฏธ๋ฆฌ โ์์โ์ฒ๋ผ ์ ์๋ ๋น ๋ฌธ์์ด์ ๋ฐํํ๊ฑฐ๋, ์ ์ฒด ๋ฌธ์์ด์ ๊ทธ๋๋ก ์ฌ๋ผ์ด์ฑํ์ฌ ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด ์ฌ๋ผ์ด์ฑ์ ํญ์ ์๋ก์ด ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ด์ฉ ๋ฌธ์๋ฅผ ๋ณต์ฌํ์ฌ ์ฑ์๋๋ค. ์ด๋ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ต๋๋ค.
Note
์๊ฐ ๋ณต์ก๋์ ๋ํด์๋ ์ํฐํด์ ์ฐธ๊ณ ํ์ธ์.
์ฌ๋ผ์ด์ฑ ๊ฒฐ๊ณผ ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์ต์ ํ
์์์ ์ดํด๋ณธ ๊ตฌํ์ผ๋ก๋ถํฐ, ์ฌ๋ผ์ด์ฑ ๊ฒฐ๊ณผ ๋ฌธ์์ด์ ์๋ณธ๊ณผ ๋ถ๋ฆฌ๋ ๋ณ๋์ ๊ฐ์ฒด์์ ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ ์ฒด ์ฌ๋ผ์ด์ค์ ์์ธ๋ฅผ ๋นผ๋ฉด ์๋ณธ ๋ฌธ์์ด ๊ฐ์ฒด๋ ์ฌ๋ผ์ด์ฑ ํ์๋ ์ฐธ์กฐ ์นด์ดํธ๊ฐ ๋ณํ์ง ์์ผ๋ฉฐ, ์๋ก ๋ง๋ค์ด์ง ํ์ ๋ฌธ์์ด ๊ฐ์ฒด์ ์๋ช ์ด ๋ ์์ ์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค. ์ด๋ฌํ ์ค๊ณ์๋ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ๋ถ๊ฐ์ ์ธ ๋ด๋ถ ์ต์ ํ๊ฐ ์กด์ฌํฉ๋๋ค.
๋ถ๋ถ ์ฌ๋ผ์ด์ค์ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ
๋ถ๋ณ ๊ฐ์ฒด์ธ ๋ฌธ์์ด์ ์ด๋ก ์ ์ผ๋ก๋ ๋ทฐ(view) ํํ๋ก ๊ตฌํํ ์๋ ์์ต๋๋ค. ์์ปจ๋ C๋ Java์ ์ผ๋ถ ๊ตฌํ์ฒ๋ผ, ์๋ณธ ๋ฌธ์์ด ๋ฒํผ๋ฅผ ๊ณต์ ํ๋ฉด์ ์์ ์คํ์ ๊ณผ ๊ธธ์ด๋ง ๋ฐ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์๋ ์๊ฐํด ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ CPython์ ์ด๋ฐ ๋ฐฉ์์ ํํ์ง ์์์ต๋๋ค. ์๋ํ๋ฉด ์์ ๋ถ๋ถ ๋ฌธ์์ด์ด ํฐ ์๋ณธ์ ์ฐธ์กฐํ ๊ฒฝ์ฐ, ๋ถ๋ถ ๋ฌธ์์ด์ด ์ด์์๋ ํ ๊ฑฐ๋ํ ์๋ณธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ๋ชปํด ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์ ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋คโ.
CPython์ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐ ์นด์ดํธ์ ๊ธฐ๋ฐํ๋ฏ๋ก, ๋ถ๋ถ ๋ฌธ์์ด์ด ์๋ณธ์ ์ฐธ์กฐํ๋ฉด ์๋ณธ ๊ฐ์ฒด๋ ์ฐธ์กฐ ์นด์ดํธ๊ฐ ๋จ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ง๋ฉ๋๋ค. ๋ฐ๋ผ์ ์์ ์กฐ๊ฐ์ ์ฐ๊ธฐ ์ํด ๊ฑฐ๋ํ ๋ฌธ์์ด ์ ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ์ก์ ๋๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋คโ.
์ด๋ฌํ ์ด์ ๋ก CPython์ ์์ ํ๊ณ ๋จ์ํ ๋ณต์ฌ๋ฅผ ํตํ ๊ตฌํ์ ์ ํํ์ต๋๋ค.

๋น ๋ฌธ์์ด๊ณผ ๋จ์ผ ๋ฌธ์ ์บ์ฑ
CPython์ ํน์ ๋ฌธ์์ด๋ค์ ์ ์ญ์ ์ผ๋ก ์ ์ธ, ๋ฏธ๋ฆฌ ์บ์ฑํ์ฌ ๋งค๋ฒ ์๋ก ํ ๋นํ์ง ์๋๋ก ์ต์ ํํฉ๋๋ค. ๋ํ์ ์ธ ๊ฒ์ด ์์ ์ดํด๋ณธ ๋น ๋ฌธ์์ด ""
๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ๋ก ์์ฃผ ์ฐ์ด๋ ํ ๊ธ์ ๋ฌธ์์ด๋ค์
๋๋ค. ์์ ์ค๋ช
ํ๋ฏ, ๋น ๋ฌธ์์ด์ unicode_empty
๋ผ๋ ์ ์ญ ์ฑ๊ธํค ๊ฐ์ฒด๋ก ๊ด๋ฆฌ๋๋ฉฐ ์ฌ๋ผ์ด์ฑ ๊ฒฐ๊ณผ๊ฐ ๋น ๋ฌธ์์ด์ด๋ฉด ์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋คโ. ๋ํ ๋ผํด-1 ๋ฒ์ (U+0000 ~ U+00FF)์ ๋จ์ผ ๋ฌธ์ ๋ฌธ์์ด์ ๋ํด์๋ ๋ฏธ๋ฆฌ 256๊ฐ๋ฅผ ๋ง๋ค์ด unicode_latin1
๋ฐฐ์ด์ ์บ์ฑํด ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ผ์ด์ฑ ๊ฒฐ๊ณผ๊ฐ "A"๋ "5"์ฒ๋ผ ํ ๊ธ์์ธ ๊ฒฝ์ฐ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฌธ์์ ์ฝ๋ ํฌ์ธํธ๊ฐ 0~255 ์ฌ์ด๋ผ๋ฉด CPython์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ง ์๊ณ ์ด๋ฏธ ์ค๋น๋ ํด๋น ๋ฌธ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐ๋ผ์ "a"[0:1]
, "a"[::]
๋ฑ์ผ๋ก 'a'๋ฅผ ์ป์ผ๋ฉด ํญ์ ๋์ผํ ๋ด๋ถ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ฉด U+0100(256)
์ด์์ ๋ฌธ์์ ๋ํด์๋ ๊ธฐ๋ณธ ์ค์ ์ ์บ์ฑ ๋์ง ์์ ๊ฐ์ ๋ฌธ์๋ผ๋ ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.


๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (ํ๋ฆฌ๋ฆฌ์คํธ)
CPython์ ์์ Unicode ๊ฐ์ฒด ์์ฑ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ํ๋ฆฌ๋ฆฌ์คํธ(freelist
)๋ ์ฌ์ฉํฉ๋๋ค. ์ผ์ ํฌ๊ธฐ ์ดํ(์: ๊ธธ์ด 1~8)์ Unicode ๊ฐ์ฒด๋ค์ ํด์ ์ ์์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ์ง ์๊ณ ๋ด๋ถ free ๋ฆฌ์คํธ์ ๋ณด๊ดํ๋ค๊ฐ, ์๋ก์ด ๋ฌธ์์ด ์์ฑ ์ ์ฌ์ฌ์ฉํ๋ ์ต์ ํ๊ฐ ์์ต๋๋คโ. ์ด ๋ฐฉ๋ฒ์ ์ฌ๋ผ์ด์ฑ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ์์ ๋ฌธ์์ด ์์ฑ์ ์ ์ฉ๋๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ํ ๋น/ํด์ ์ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ์ค๋๋ค. ๋ค๋ง ์ด ๋ถ๋ถ์ CPython์ ๋ด๋ถ ๊ตฌํ ์ต์ ํ์ด๋ฉฐ, ์ธ๋ถ์์ ์ง์ ์ ์ผ๋ก ํ์ธํ๊ธฐ๋ ์ด๋ ต์ต๋๋ค.

์์ ๋ก ๋ณด๋ ๋ด๋ถ ์ฒ๋ฆฌ ํ๋ฆ
์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก, ์ค์ ํ์ด์ฌ ์ฝ๋ ์์ ๊ฐ ๋ด๋ถ์์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง ๋ค์ ํ๋ฒ ๋ฐ๋ผ๊ฐ ๋ณด๊ฒ ์ต๋๋ค. ์์๋ก๋ ์๋์ ์ฝ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.

์ด ์ฝ๋์ ๋ํ CPython ๋ด๋ถ ์ฒ๋ฆฌ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Example #1
sub1 = s[0:]
์ด ์ฌ๋ผ์ด์ค๋ ๋ฌธ์์ด ์ ์ฒด(โPython Substring Exampleโ)๋ฅผ ๋ฐํํ๋ฏ๋ก, unicode_subscript
ํจ์์์ ๋ ๋ฒ์งธ ์กฐ๊ฑด์ ๋ถํฉํฉ๋๋ค. ๋ฐ๋ผ์ CPython์ s
๊ฐ์ฒด ์์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก sub1
is s๋ ๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๊ฐ์ฒด์ด๋ฏ๋ก True
๊ฐ ๋๊ณ , id(sub1)
๊ณผ id(s)
๋ ๋์ผํฉ๋๋ค. ๋ํ ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋์ง ์์ผ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฉด์์๋ ์ด ์ฐ์ฐ์ ์ ๋ ดํฉ๋๋คโ(์ฐธ์กฐ ์นด์ดํธ๋ง ์ฆ๊ฐ).
Example #2
sub2 = s[7:16]
๋ถ๋ถ ๋ฌธ์์ด "Substring"์ ์ถ์ถํ๋ ์ฌ๋ผ์ด์ค์
๋๋ค. ์ด ๊ฒฝ์ฐ step=1
์ด์ง๋ง ์ ์ฒด ๊ธธ์ด๊ฐ ์๋๋ฏ๋ก, unicode_subscript
๋ ์๋ก์ด Unicode ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ๋ฉ๋๋ค. ๋ด๋ถ์ ์ผ๋ก PyUnicode_FromUnicode(s->str + 7, 9)
(9๊ธ์ ๊ธธ์ด)๊ฐ ํธ์ถ๋๊ณ , ์๋ณธ s์ ๋ฐ์ดํฐ ์ค 7๋ฒ ์ธ๋ฑ์ค๋ถํฐ 9๊ฐ์ ๋ฌธ์๋ฅผ ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌํ์ฌ ์ ๋ฒํผ์ ์ฑ์๋๋ค. ์ด ๋ฒํผ๋ก PyUnicodeObject
๊ตฌ์กฐ์ฒด๊ฐ ํ ๋น๋์ด sub2
๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋ฉ๋๋คโ. ์ด์ sub2
๋ s
์ ๋ค๋ฅธ ๊ฐ์ฒด์ด๋ฉฐ(sub2
is s
๋ False
), id(sub2)
๋ ๋ค๋ฆ
๋๋ค. ๊ทธ๋ฌ๋ sub2
์ ๋ด์ฉ์ "Substring"์ผ๋ก ์๋ณธ์ ํด๋น ๋ถ๋ถ๊ณผ ๋์ผํฉ๋๋ค. ์๋ณธ s
์ sub2
๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์์ผ๋ฏ๋ก, ์ค๋ น ์ดํ์ s๊ฐ ์ฐธ์กฐ ํ์๊ฐ ์์ด ๊ฐ๋น์ง ์ปฌ๋ ์
๋์ด๋ sub2
๋ ๋
๋ฆฝ์ ์ผ๋ก ๋ด์ฉ์ ์ ์งํฉ๋๋ค.
Example #3
sub3 = s[::2]
์ด ์ฌ๋ผ์ด์ค๋ ์ฒ์๋ถํฐ ๋๊น์ง step=2
๋ก (0, 2 , 4, ...) ๋ฌธ์๋ฅผ ์ทจํฉ๋๋ค. ๊ตฌํ์ step != 1
์ด๋ฏ๋ก, CPython์ slicelength
๋ฅผ ๊ณ์ฐํ ํ ๊ทธ ๊ธธ์ด๋งํผ ๋ฒํผ๋ฅผ ํ ๋นํ๊ณ , ์๋ณธ์ ํด๋น ์ธ๋ฑ์ค ๋ฌธ์๋ค์ ํ๋์ฉ ๋ณต์ฌํฉ๋๋คโ. ์ด ์์์ s
์ ์ง์ ์ธ๋ฑ์ค ๋ฌธ์๋ฅผ ๋ชจ์ "Pto usrn xml" ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ ๋ ๊ฒ์
๋๋ค. ์ด ์ญ์ ์๋ก์ด ๊ฐ์ฒด sub3
๋ฅผ ์์ฑํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ค๋ง step=2
๋ผ ์ฐ์๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด์ง๋ง, ์ฌ์ ํ ๋ณต์ฌ ๋น์ฉ์ ๊ฒฐ๊ณผ ๋ฌธ์์ด ๊ธธ์ด์ ๋น๋กํฉ๋๋ค.
๋ง์น๋ฉฐ
์ด๋ ๊ฒ ํ์ด์ฌ ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ๋ถํฐ ์์ํ์ฌ, ์ธ๋ฑ์ฑ ๋ฐฉ์, ํ๋ผ๋ฏธํฐ์ ์ญํ , ๋ฌธ์์ด ๋ถ๋ณ์ฑ์ ๊ฐ๋ , ๊ทธ๋ฆฌ๊ณ CPython ๋ด๋ถ ๊ตฌํ๊น์ง ๊น์ด ์๊ฒ ์ดํด๋ณด์๋๋ฐ์.
๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์ ํ์ด์ฌ์์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ด๋ฉฐ, ๊ทธ ์๋ ์๋ฆฌ๋ฅผ ์ ํํ ์ดํดํ๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ๋์ฑ ํจ๊ณผ์ ์ด๊ณ ์ ์ฐํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ๊ธฐ๋ณธ ๋ฌธ๋ฒ๊ณผ ๋ค์ํ ํ์ฉ๋ฒ์ ์์งํ๊ณ , ์ธ๋ฑ์ฑ ๋ฐฉ์๊ณผ ํ๋ผ๋ฏธํฐ์ ์ญํ ์ ๋ช ํํ ์ดํดํ๋ฉฐ, ๋ฌธ์์ด์ ๋ถ๋ณ์ฑ์ด๋ผ๋ ํต์ฌ ๊ฐ๋ ์ ๊ธฐ์ตํ๋ค๋ฉด, ํ์ด์ฌ์ ์ด์ฉํ ๋ฌธ์์ด ์กฐ์ ๋ฅ๋ ฅ์ ํ ๋จ๊ณ ๋ ํฅ์์ํฌ ์ ์์ ๊ฒ๋๋ค.
๋ ๋์๊ฐ CPython ์์ค ์ฝ๋ ํ์์ ํตํด, ์ฌ๋ผ์ด์ฑ์ ๋ด๋ถ ์๋ ๋ฐฉ์์ ์ดํดํ๋ค๋ฉด ํ์ด์ฌ ์ธ์ด ์์ฒด์ ๋ํ ๊น์ด ์๋ ํต์ฐฐ๋ ฅ์ ์ป์ ์ ์์ฃ . ์์ผ๋ก๋ ํ์ด์ฌ ๋ฌธ์, ํํ ๋ฆฌ์ผ, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋ฌธ์ ํด๊ฒฐ์ ํตํด ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ์ ํฌํจํ ํ๋ก๊ทธ๋๋ฐ ๋ฅ๋ ฅ์ ๋์ฑ ๋ฐ์ ์ํฌ ์ ์๊ธธ ๊ธฐ๋ํฉ๋๋ค.