Data Types
Duy Văn | 9/1/2025
Về cơ bản thì theo lý thuyết, Python có 4 kiểu dữ liệu cơ bản, đó là:
- Numeric: int, float, complex
- String: str
- Sequence: list, tuple, set
- Dictionary: dict
Bản chất các loại data types này thế nào, các function và method đi kèm ra làm sao thì bạn có thể lên w3school tại đây để đọc.
Numeric
Đầu tiên, với data types dạng numeric - tức là số, bạn có thể đọc ở đây để hiểu rõ hơn về cách sử dụng và cách thức hoạt động của nó. Còn ở đây mình sẽ nói về một số vấn đề đặc biệt
Floating points
Số má trong Python được máy tính hiểu theo phân số nhị phân, tức là 1/2, 1/4, 1/8, …
Ví dụ, số thập phân 0.625 theo thập phân là tổng của : \(6 \cdot \frac{1}{10} + 2\cdot\frac{1}{100} + 5\cdot\frac{1}{1000}\) còn theo nhị phân là: \(1\cdot\frac{1}{2} + 0\cdot\frac{1}{4} + 1\cdot\frac{1}{8}\) tức là \(0.101\)
Hai phân số ở hệ thập phân và nhị phân này là bằng nhau về giá trị, máy tính sẽ hiểu theo hệ nhị phân, nhưng vấn đề phát sinh khi mà đa số phân số hệ thập phân không thể biểu diễn chính xác trong hệ nhị phân, ví dụ như 0.1, 0.2, 0.3, …
Theo như tính toán, \(0.1\) trong hệ nhị phân sẽ là một chuỗi vô hạn nhìn kiểu như
\[0.0001100110011001100110011001100110011001100110011...\]Vì thế trong Python xuất hiện một vấn đề, khi áp dụng so sánh giá trị giữa 2 giá trị không thể biểu diễn ở dạng nhị phân, nó sẽ gây ra sai lệch, trừ khi so sánh trực tiếp số với số
Vậy nên, khi sử dụng các framework test thuần code trong python như selenium hay palywright, nên hạn chế sử dụng cách assert giá trị dùng ==, mà nên dùng các function assertion đi kèm library. Ví dụ trong library unittest thì có assertEqual
Cast giữa các kiểu số
Các kiểu số có thể cast qua lại cho nhau
Tuy nhiên, complex không thể cast ngược lại về int và float kể cả khi phần ảo là 0, tức là nôm na, nếu cast một int sang complex rồi ngược lại, nó sẽ lỗi do python không cho phép cast complex
print(int(complex(1))) #error
Bạn có thể thử ngay ở trên
String
String thì bạn đọc ở đây