Alert

이 글은 Claude Code의 도움을 λ°›μ•„ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€

TL;DR

  • Python 3.15λŠ” lazy ν‚€μ›Œλ“œ 기반 μ§€μ—° import(PEP 810)둜 μ½œλ“œ μŠ€νƒ€νŠΈ μ‹œκ°„μ„ 단좕
  • λΆˆλ³€ λ”•μ…”λ„ˆλ¦¬ frozendict(PEP 814)와 κ³ μœ κ°’ sentinel(PEP 661)이 λ‚΄μž₯ νƒ€μž…μœΌλ‘œ μΆ”κ°€
  • μ»΄ν”„λ¦¬ν—¨μ…˜Β·μ œλ„ˆλ ˆμ΄ν„° 식 μ•ˆμ—μ„œ */** μ–ΈνŒ¨ν‚Ή ν—ˆμš©(PEP 798)
  • JIT μ„±λŠ₯ ν–₯상, μƒ˜ν”Œλ§ ν”„λ‘œνŒŒμΌλŸ¬ μΆ”κ°€, 3.14의 incremental GCλŠ” 철회
  • μž‘μ„± μ‹œμ  3.15λŠ” beta(3.15.0b3) λ‹¨κ³„λ‘œ, 2026λ…„ 6μ›” κΈ°λŠ₯ 동결 ν›„ ν™•μ •λœ ν•­λͺ© κΈ°μ€€

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()λ₯Ό μ œμ•ˆ).