ํ์ด์ฌ ์๋ฃ๊ตฌ์กฐ ํน์ง
ํน์ง | List | Dictionary | Set | Tuple |
์์ ์ ์ง | O | Python 3.7 ๋ถํฐ O | X | O |
์ธ๋ฑ์ฑ | O | X | X | O |
๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ | O | O | O | X |
์ค๋ณต ํ์ฉ | O | ํค๋ ์ค๋ณต ๋ถ๊ฐ, ๊ฐ์ ๊ฐ๋ฅ | X | O |
๋ฐ์ดํฐ | ์์ฐจ ๋ฐ์ดํฐ | ํค-๊ฐ ์ ๋ฐ์ดํฐ | ๊ณ ์ ํ ์์ ์งํฉ | ๋ถ๋ณ ๋ฐ์ดํฐ |
GIL(Global Interpreter Lock)
- Python ๋งค์ปค๋์ฆ์ผ๋ก ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ ๋ฐฉ์ง → ํ ๋ฒ์ ํ๋์ ์ค๋ ๋๋ง ์คํ๋จ
- ๋ชฉ์
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ - ์ฐธ์กฐ ์นด์ดํธ๋ฅผ ํตํด ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ฅผ ์๋ํ๋ ๋ฐ, ์ด ๋ถ๋ถ์ด race condition์ ์ทจ์ฝํจ, ์ด๋ฅผ ํด๊ฒฐ
- ๊ฐ์ํ - ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์ง
- ์ฅ์
- GIL๋ก ๋ค์ค ์ค๋ ๋ ํ๊ฒฝ์ ๋ณต์กํ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐ → ๊ทธ๋ฅ ์ค๋ ๋๋ฅผ ์ ๊ถ๋ฒ๋ฆผ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง
- ๋จ์
- ๋ณ๋ ฌ์ฑ ์ ํ : ๋ฉํฐ์ฐ๋ ๋๋ก ๊ตฌํํด๋ ์ค์ ๋์์ ์คํ๋์ง ์๊ธฐ์ ์ฑ๋ฅ์ ์ ์ฝ์ด ๋ฐ์
๋น๋๊ธฐ ๊ตฌํ ๋ฐฉ๋ฒ
asyncio ๊ธฐ๋ณธ ๋ชจ๋์ ํ์ฉํ์ฌ ๋น๋๊ธฐ ๊ตฌํ
import asyncio
async def async_function():
print("Async function started")
await asyncio.sleep(1)
print("Async function finished")
asyncio.run(async_function())
๋ฐ์ฝ๋ ์ดํฐ
ํจ์ ๋ฐ์ฝ๋ ์ดํฐ
def simple_decorator(func):
def wrapper():
print("Before function call")
func()
print("After function call")
return wrapper
@simple_decorator
def my_function():
print("This is my function")
my_function()
ํด๋์ค ๋ฐ์ฝ๋ ์ดํฐ
def class_decorator(cls):
class WrappedClass(cls):
def new_method(self):
print("New method added")
return WrappedClass
@class_decorator
class MyClass:
def original_method(self):
print("Original method")
obj = MyClass()
obj.original_method()
obj.new_method()
ํ์ด์ฌ์ ๋จ์
1. ์ฑ๋ฅ (Performance)
Python์ ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก, ์ปดํ์ผ ์ธ์ด(C/C++, Java)๋ณด๋ค ์ผ๋ฐ์ ์ผ๋ก ๋๋ฆฝ๋๋ค. ์ด๋ Python์ด ๋์ ์์ค์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๊ณ , ๋์ ํ์ดํ(dynamic typing)๊ณผ ๊ฐ๋น์ง ์ปฌ๋ ์ (garbage collection) ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
2. ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ (Memory Consumption)
Python์ ๋์ ์์ค์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋์ ํ์ดํ์ ์ง์ํ๊ธฐ ๋๋ฌธ์, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋ง์ ์ ์์ต๋๋ค. ํนํ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์์ ์์๋ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ด ๋ฎ์ ์ ์์ต๋๋ค.
3. ์ฝํ ๋ฉํฐ์ค๋ ๋ฉ ์ฑ๋ฅ (Weak Multithreading Performance)
์์ ์ธ๊ธํ GIL๋ก ์ธํด, Python์ ๋ฉํฐ์ค๋ ๋ฉ์ CPU ๋ฐ์ด๋ ์์ ์์ ์ ํ์ ์ ๋๋ค. I/O ๋ฐ์ด๋ ์์ ์์๋ ๋น๋๊ธฐ I/O๋ฅผ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ง๋ง, ๋ฉํฐ์ค๋ ๋ฉ์ ์ฌ์ฉํ ๋ณ๋ ฌ ์ฒ๋ฆฌ์์๋ ์ฑ๋ฅ์์ ์ ์ฝ์ด ์์ต๋๋ค.
4. ์คํ ํ์ผ ํฌ๊ธฐ (Executable Size)
Python์ผ๋ก ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋ฆฝ ์คํ ํ์ผ๋ก ํจํค์งํ ๋, ์คํ ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์ง ์ ์์ต๋๋ค. ์ด๋ Python ์ธํฐํ๋ฆฌํฐ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ก ์ธํด ๋ฐฐํฌ์ ์ค์น๊ฐ ๋ณต์กํด์ง ์ ์์ต๋๋ค.
5. ์ ์ฝ๋ ๋ฐํ์ ํ์ ๊ฒ์ฌ (Limited Runtime Type Checking)
Python์ ๋์ ํ์ดํ ์ธ์ด๋ก, ํ์ ๊ฒ์ฌ๊ฐ ๋ฐํ์์ ์ด๋ฃจ์ด์ง๋๋ค. ์ด๋ ์ ์ฐ์ฑ์ ์ ๊ณตํ์ง๋ง, ํ์ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ํ์์ ์ก์๋ด๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. ํ์ ํํ (type hinting)๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ง๋ง, ์ด๋ ์ปดํ์ผ ํ์ ํ์ ๊ฒ์ฌ๋ฅผ ์์ ํ ๋์ฒดํ์ง๋ ์์ต๋๋ค. → Pydantic์ผ๋ก ๊ทน๋ณต
Type hint์ Pydantic ์ฐจ์ด
ํน์ง | Type hint | Pydantic |
๋ชฉ์ | ์ฝ๋ ๊ฐ๋ ์ฑ ๋ฐ ์ ์ ํ์ ๊ฒ์ฌ | ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋ฐ ๋ฐํ์ ๋ฐ์ดํฐ ๊ฒ์ฆ |
๊ฒ์ฆ ์์ | ์ ์ ๋ถ์ ๋๊ตฌ/IDE์์ ๊ฒ์ฌ | ๋ฐํ์์์ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ฐ ๋ณํ |
์ฌ์ฉ ์ฉ๋ | ํจ์ ์๊ทธ๋์ฒ, ๋ณ์ ํ์ ๋ช ์ | ๋ฐ์ดํฐ ํด๋์ค ์ ์ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ |
์ฑ๋ฅ ์ํฅ | ๋ฐํ์ ์ํฅ ์์ | ๋ฐํ์์ ๋ฐ์ดํฐ ๊ฒ์ฆ ์ํ์ผ๋ก ์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ |
์ค๋ฅ ์ฒ๋ฆฌ | ์ ์ ๋ถ์ ๋จ๊ณ์์ ํ์ ์ค๋ฅ ๋ฐ๊ฒฌ | ๋ฐํ์์์ ValidationError ๋ฐ์ |
'๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] *, ** ์ฌ์ฉ๋ฒ (0) | 2025.02.18 |
---|---|
[Python] GIL์ ํด์ ํด๋ณด์ (0) | 2024.10.11 |
[Python] GIL์ด๋? ํ์ด์ฌ์์์ ๋ฉํฐ์ฐ๋ ๋ (0) | 2024.05.06 |
[Python] Pandas, Numpy ์ฑ๋ฅ ํฅ์ (feat.Pandas vs Numpy) (0) | 2024.05.06 |
Python 3.11 ๋ฌ๋ผ์ง ์ - ์ ๋ฐ์ดํธ (0) | 2024.01.15 |