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

Sequence

List

Tuple

Set

Dictionary