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 ๊ธฐ์ค€ 89%, 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()๋ฅผ ์ œ์•ˆ).