Python có một tập hợp phong phú các kiểu dựng sẵn bao gồm số, văn bản, collection và nhiều hơn nữa. Biết chúng — và kiểu nào là mutable so với immutable — là điều cơ bản.
Các kiểu số
x =
y =
z = +
b =
Lưu ý: int của Python có độ chính xác tùy ý — nó không bao giờ tràn số (khác với int kích thước cố định trong C/Java); 2 ** 1000 vẫn chạy ngon.
s = "hello" # str — văn bản Unicode (immutable)
data = b"bytes" # bytes — nhị phân thô (immutable)
lst = [1, 2, 3] # list — có thứ tự, MUTABLE, cho phép trùng lặp
tup = (1, 2, 3) # tuple — có thứ tự, IMMUTABLE
d = {"a": 1, "b": 2} # dict — key→value, mutable, theo thứ tự chèn
s = {1, 2, 3} # set — không thứ tự, phần tử duy nhất, mutable
fs = frozenset({1, 2}) # frozenset — set immutable
result = None # NoneType — biểu diễn "không có giá trị" (giống null)
if result is None: # luôn so sánh với None bằng `is`, không dùng ==
...
type(x) # <class 'int'>
isinstance(x, int) # True — cách kiểm tra ưu tiên (xử lý cả lớp con)
Immutable: int, float, bool, str, tuple, frozenset, bytes, None
Mutable: list, dict, set, bytearray
Sự phân biệt này rất quan trọng — các đối tượng immutable có thể làm key của dict và an toàn để chia sẻ; còn các đối tượng mutable có thể thay đổi bất ngờ nếu bị alias.
Các kiểu dựng sẵn là từ vựng của mọi đoạn code Python.
Biết mục đích của từng kiểu (list cho chuỗi có thứ tự, dict cho key-value, set cho tính duy nhất, tuple cho bản ghi cố định), các số nguyên có độ chính xác tùy ý, và đặc biệt là sự phân chia mutable-vs-immutable (chi phối key của dict, lỗi aliasing và những gì có thể chia sẻ an toàn) là nền tảng.
Chọn đúng kiểu cho công việc — và hiểu tính mutable của nó — là một kỹ năng Python cốt lõi ảnh hưởng đến tính đúng đắn và hiệu năng xuyên suốt chương trình.