TL;DR
lazyํค์๋ ์ง์ฐ import(PEP 810)์ ์ปดํ๋ฆฌํจ์ ๋ด*/**์ธํจํน(PEP 798) ๋ฑ ๋ฌธ๋ฒ ๋ณํ- ๋ถ๋ณ ๋์ ๋๋ฆฌ
frozendict(PEP 814), ๊ณ ์ ๊ฐsentinel(PEP 661) ๋ด์ฅ ํ์ ์ถ๊ฐ- JIT ์ฑ๋ฅ ํฅ์๊ณผ ์ํ๋ง ํ๋กํ์ผ๋ฌ ์ถ๊ฐ, 3.14 incremental GC ์ฒ ํ
AI-assisted
Source
๋ฌธ๋ฒ ๋ณํ
- Lazy imports(PEP 810):
lazy์ํํธ ํค์๋๋ก import๋ฅผ ์ค์ ์ฌ์ฉ ์์ ๊น์ง ๋ฏธ๋ฃฌ๋ค. top-level import๊ฐ ๋ง์ CLIยท์น ํ๋ก์ธ์ค์ ์ฝ๋ ์คํํธ์์ ์๋ฐฑ ms๋ฅผ ์ค์ผ ์ ์๋ค. ์์ธํ ๋์๊ณผ ์ ์ฉ ๋ฐฉ์์ Python Lazy Imports - PEP 810์ ์ ๋ฆฌ๋ผ ์๋ค. - ์ปดํ๋ฆฌํจ์
๋ด ์ธํจํน(PEP 798):
*ยท**์ธํจํน์ ์ปดํ๋ฆฌํจ์ ๊ณผ ์ ๋๋ ์ดํฐ ์ ์์์ ์ธ ์ ์๋ค. ์ค์ฒฉ ๋ฃจํ๋ฅผ ํ์ด ์ธ ์ ์์ด ํํ์ด ๊ฐ๊ฒฐํด์ง๋ค.
# ๊ธฐ์กด
y = [a for sub in lists for a in sub]
# 3.15
y = [*sub for sub in lists]์ ๋ด์ฅ ํ์
- frozendict(PEP 814): ๋ถ๋ณ ๋์ ๋๋ฆฌ. ์์ฑ ํ ์ถ๊ฐยท์ญ์ ยท๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ณ , ํค์ ๊ฐ์ด ๋ชจ๋ ํด์ ๊ฐ๋ฅํ๋ฉด ์์ ๋ ํด์ ๊ฐ๋ฅํด ๋ค๋ฅธ ๋์ ๋๋ฆฌ์ ํค๋ก ์ธ ์ ์๋ค. ์ฝ์ ์์๋ ๋ณด์กดํ์ง๋ง ๋น๊ต๋ ์์๋ฅผ ๋ฐ์ง์ง ์๋๋ค.
- sentinel(PEP 661): ๊ณ ์ ํ sentinel ๊ฐ์ ๋ง๋๋ ํ์
.
None์ ์ ํจํ ๊ฐ์ผ๋ก ์จ์ผ ํด์object()๋ก ๋น ํ์์ ๋ง๋ค๋ ๊ดํ์ ๋์ฒดํ๋ค. ๋ณต์ฌํด๋ identity๊ฐ ์ ์ง๋๊ณ ํ์ ์์์|๋ก ์ธ ์ ์๋ค. ๋ชจ๋ยท์ด๋ฆ์ผ๋ก import ๊ฐ๋ฅํ๋ฉด pickle๋ ๋๋ค.
์ฑ๋ฅ๊ณผ ๋๊ตฌ
- JIT ๊ฐ์ : 3.13์ ๋์
๋ JIT์ด x86-64 Linux ๊ธฐ์ค 8
9%, AArch64 macOS ๊ธฐ์ค 1213%์ ์ฑ๋ฅ ํฅ์์ ๋ณด์ธ๋ค. - ์ํ๋ง ํ๋กํ์ผ๋ฌ:
profiling.sampling๋ชจ๋๋ก ํต๊ณ ์ํ๋ง ๊ธฐ๋ฐ ํ๋กํ์ผ๋ง์ด ์ถ๊ฐ๋๋ค. ๋ชจ๋ ํธ์ถ์ ์ถ์ ํด ์ ํํ์ง๋ง ๋๋ฆฐcProfile(์ด์ profiling.tracing์ผ๋ก ๊ฐ๋ช )๋ณด๋ค ์ค๋ฒํค๋๊ฐ ํจ์ฌ ์๋ค. - Incremental GC ์ฒ ํ: 3.14์ ๋ค์ด๊ฐ๋ incremental GC๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํค์ด๋ค๋ ๋ณด๊ณ ๋ก ์ฒ ํ๋๋ค. 3.13 ์ด์ ์ generational GC๋ก ๋๋์๊ฐ๊ณ , ๊ฐ์ ํ ์ฌ๋์ ์ด ์์ ๋ผ ์๋ค.
ํ์ ๊ณผ ๊ธฐํ
- TypedDict ํ์ฅ: ์ง์ ํ ํค๋ง ํ์ฉํ๋
closed์ธ์์, ์ถ๊ฐ ํค๋ฅผ ํ์ฉํ๋ ํ์ ์ ์ง์ ํ๋extra_items์ธ์๊ฐ ์ถ๊ฐ๋๋ค. - TypeForm: ํ์ ์์ฒด๋ฅผ ๊ฐ์ผ๋ก ๋ค๋ฃจ๋ ์๋ฆฌ์ ํ์ ํํ์ ์ธ ์ ์๊ฒ ํ๋ค. ํ์ ๊ด๋ จ ๋ณ๊ฒฝ์ Python typing ์ฐธ๊ณ .
- ์๋ฌ ๋ฉ์์ง ๊ฐ์ :
AttributeError์ ์ ๋ฒ์๊ฐ ๋์ด์ก๊ณ , ๋ค๋ฅธ ์ธ์ด์ ํํ ๋ฉ์๋๋ช ๋ ์ฐธ๊ณ ํด ์ ์ํ๋ค(์:list.push()ํธ์ถ ์.append()๋ฅผ ์ ์).