Dynamic Typing (Kiểu động): Kiểu của biến được xác định tại runtime dựa trên giá trị gán, không cần khai báo trước. Biến có thể đổi kiểu bất cứ lúc nào.
Ví dụ minh họa
x = [1, 2, 3] # x là list print(type(x)) #x = True # x giờ là bool print(type(x)) # x = "hello" # x giờ là str print(type(x)) # x = 3.14 # x giờ là float print(type(x)) #
Kết quả
So sánh Static vs Dynamic Typing
| Đặc điểm | Static (C, C++, Java, Go) | Dynamic (Python, JS, Ruby) |
|---|---|---|
| Khai báo kiểu | Bắt buộc | Không cần |
| Kiểm tra kiểu | Compile time | Runtime |
| Biến đổi kiểu | Không (cần cast) | Tự do |
| Bộ nhớ | Tối ưu compile-time | Quản lý tự động (GC) |
| Lỗi sớm | Compile time | Runtime (có thể crash sau) |
Python 3.5+ Type Hints (Optional Static Typing)
def greet(name: str) -> str:
return f"Hello, {name}"
# Không enforce tại runtime, nhưng tool (mypy, pyright) check static
greet("World") # OK
greet(123) # Runtime OK, static checker cảnh báo
Kết luận
Python dynamic typed → linh hoạt, phát triển nhanh, ít code boilerplate. Trade-off: lỗi kiểu chỉ bắt được khi chạy. Dùng type hints + static analyzer cho dự án lớn.