Khóa học
Python là một trong những ngôn ngữ lập trình được sử dụng nhiều nhất vào năm 2025, nổi tiếng nhờ sự đơn giản, dễ đọc và hệ sinh thái thư viện, framework phong phú cho khoa học dữ liệu, trí tuệ nhân tạo và học máy.
Ngoài ra, Python hỗ trợ nhiều kiểu dữ liệu, khiến nó trở thành công cụ tuyệt vời để giải quyết các bài toán phức tạp và thao tác dữ liệu. Điều này giúp nhà phát triển tạo ra các ứng dụng hữu ích trong thực tế.
Trong bài viết thân thiện với người mới bắt đầu này, chúng ta sẽ xem xét các kiểu dữ liệu chính trong Python. Chúng ta sẽ khám phá đặc điểm, thời điểm sử dụng và cung cấp ví dụ thực tế cho từng loại.
Tổng quan về Kiểu Dữ liệu trong Python
Các kiểu dữ liệu trong Python được chia thành nhiều nhóm, mỗi nhóm được thiết kế để xử lý các loại dữ liệu và thao tác cụ thể.
Hiểu các nhóm này không chỉ là kiến thức lý thuyết mà còn là kỹ năng thực hành giúp bạn viết mã hiệu quả và ít lỗi. Việc chọn đúng kiểu dữ liệu có thể ảnh hưởng đáng kể đến mức sử dụng bộ nhớ, tốc độ tính toán và độ rõ ràng của mã.
Hãy cùng khám phá chi tiết từng nhóm, nhấn mạnh các trường hợp sử dụng và ứng dụng của chúng.
Các kiểu dữ liệu tích hợp sẵn
Python cung cấp nhiều kiểu dữ liệu tích hợp sẵn. Bảng dưới đây phân loại các kiểu dữ liệu này để bạn nắm nhanh cách sử dụng:
|
Nhóm |
Kiểu dữ liệu |
|
Số |
int, float, complex |
|
Dãy |
str, list, tuple |
|
Ánh xạ |
dict |
|
Tập hợp |
set, frozenset |
|
Boolean |
bool |
|
NoneType |
NoneType |
Gán kiểu động
Python là một ngôn ngữ lập trình kiểu động, nghĩa là bạn không cần khai báo tường minh kiểu của biến khi định nghĩa. Thay vào đó, bộ thông dịch Python xác định và gán kiểu động dựa trên giá trị được gán cho biến.
Để hiểu cách Python khác biệt, hãy so sánh với một ngôn ngữ kiểu tĩnh như Java.
Trong Java, bạn phải khai báo tường minh kiểu của mọi biến, như dưới đây:
int x = 10; // Integer
double y = 10.5; // Float
String z = "Hello"; // String
Ngược lại, Python cho phép bạn gán giá trị trực tiếp mà không cần chỉ định kiểu, giúp linh hoạt và ngắn gọn hơn:
x = 10 # Integer
y = 10.5 # Float
z = "Hello" # String
Tuy nhiên, sự linh hoạt này đòi hỏi bạn chú ý đến việc thay đổi kiểu không chủ ý trong thời gian chạy, điều có thể dẫn đến lỗi.
Gán kiểu động là một trong những lý do khiến Python phổ biến với người mới bắt đầu, vì nó cân bằng giữa sự đơn giản và sức mạnh.
Bây giờ, hãy xem chi tiết tất cả các kiểu dữ liệu.
1. Kiểu Dữ liệu Số
Python cung cấp một số kiểu dữ liệu số để xử lý các giá trị số khác nhau.
1.1. Số nguyên (int):
Là các số nguyên, dương hoặc âm, không có phần thập phân.
Đây là các giá trị số cơ bản biểu thị số đếm hoặc các phép đo rời rạc.
Không giống số thực dấu chấm động, số nguyên là chính xác và không có xấp xỉ, lý tưởng cho các tình huống cần độ chính xác như đánh chỉ mục hoặc đếm phần tử.
age = 25
1.2. Số thực dấu chấm động (float):
Các số có phần thập phân hoặc dạng số mũ.
Những giá trị này thường dùng trong các tình huống cần độ chính xác phần thập phân, như tính toán tài chính, đo lường khoa học và lập trình đồ họa.
Số thực dấu chấm động cũng có thể biểu diễn các giá trị rất lớn hoặc rất nhỏ bằng ký pháp số mũ, khiến chúng linh hoạt cho nhiều ứng dụng số học.
price = 19.99
1.3. Số phức (complex):
Các số có phần thực và phần ảo. Số phức hữu ích trong các lĩnh vực như kỹ thuật điện, vật lý và xử lý tín hiệu, nơi các phép toán với số ảo rất phổ biến.
Python biểu diễn số phức dưới dạng a + bj, trong đó a là phần thực và b là phần ảo. Hỗ trợ tích hợp sẵn này đơn giản hóa các phép tính vốn cần thư viện ngoài hoặc tự hiện thực ở ngôn ngữ khác.
z = 2 + 3j
2. Kiểu Dữ liệu Dãy
Ngoài số, Python còn cung cấp các kiểu dữ liệu dãy để lưu trữ các tập hợp phần tử có thứ tự.
2.1. Chuỗi (str):
Các dãy ký tự có thứ tự, đặt trong dấu nháy đơn hoặc kép. Chuỗi là một trong những kiểu dữ liệu linh hoạt nhất trong Python, cho phép bạn lưu trữ và thao tác dữ liệu dạng văn bản.
Chúng thường được dùng trong các tác vụ như xử lý đầu vào người dùng, tạo thông điệp hoặc xử lý các tập dữ liệu văn bản lớn.
Python cung cấp nhiều phương thức tích hợp sẵn như .lower(), .upper(), .replace() và .split(), giúp làm việc với chuỗi rất hiệu quả.
greeting = "Welcome to Python!"
2.2. Danh sách (list):
List là các tập hợp có thứ tự và có thể thay đổi, có thể chứa phần tử thuộc nhiều kiểu dữ liệu khác nhau.
Sự linh hoạt này khiến list là một trong những kiểu dữ liệu được dùng nhiều nhất trong Python, phù hợp cho các tác vụ từ lưu trữ đơn giản đến thao tác dữ liệu phức tạp.
List cho phép thay đổi kích thước động và hỗ trợ nhiều thao tác như cắt lát (slicing), thêm (append) và xóa phần tử, khiến chúng trở thành cấu trúc ưa dùng khi cần dữ liệu có thứ tự và có thể thay đổi.
fruits = ["apple", "banana", "cherry"]
2.3. Bộ (tuple):
Các tập hợp có thứ tự, bất biến. Tuple thường dùng để lưu trữ các tập dữ liệu cố định nơi tính bất biến quan trọng, như tọa độ địa lý, mã màu RGB hoặc bản ghi cơ sở dữ liệu.
Không giống list, tuple không thể bị thay đổi sau khi tạo, giúp nhanh hơn và an toàn hơn trong các tình huống yêu cầu tính toàn vẹn dữ liệu.
dimensions = (1920, 1080)
3. Kiểu Dữ liệu Ánh xạ
Trong khi dãy lưu trữ các tập hợp có thứ tự, Python cũng cung cấp kiểu dữ liệu ánh xạ để liên kết khóa với giá trị. Kiểu ánh xạ được dùng nhiều nhất là dictionary.
3.1. Từ điển (dict)
Tập hợp các cặp khóa–giá trị, trong đó khóa là duy nhất và bất biến.
Dictionary rất linh hoạt và cho phép bạn tổ chức, truy xuất dữ liệu hiệu quả bằng các khóa có ý nghĩa thay vì dựa vào chỉ số số học. Điều này đặc biệt hữu ích để biểu diễn dữ liệu có cấu trúc như đối tượng JSON hoặc thiết lập cấu hình.
Dictionary trong Python cũng hỗ trợ nhiều thao tác như thêm, cập nhật hoặc xóa cặp khóa–giá trị, khiến chúng trở thành công cụ thiết yếu trong nhiều tình huống lập trình.
person = {"name": "Alice", "age": 30}
4. Tập hợp
Bên cạnh dãy và ánh xạ, Python cung cấp kiểu dữ liệu tập hợp, lưu trữ các phần tử duy nhất không có thứ tự cụ thể.
4.1. Set (set)
Tập hợp không có thứ tự của các phần tử duy nhất. Set đặc biệt hữu ích khi bạn cần đảm bảo dữ liệu không có phần tử trùng lặp, như kiểm tra tư cách thành viên hoặc loại bỏ bản sao khỏi một danh sách.
Chúng hỗ trợ các phép toán tập hợp như hợp, giao và hiệu, là công cụ mạnh để giải quyết các bài toán liên quan đến tập dữ liệu.
unique_numbers = {1, 2, 3, 4, 5}
4.2. Tập hợp đóng băng (frozenset)
Phiên bản bất biến của set, nghĩa là sau khi tạo, các phần tử của nó không thể bị thay đổi.
Frozenset hữu ích khi bạn cần một tập hợp các phần tử duy nhất có thể băm (hashable), như dùng set làm khóa trong dictionary hoặc đảm bảo tính toàn vẹn của dữ liệu không được phép thay đổi.
Chúng giữ mọi đặc tính của set thông thường, như hỗ trợ các phép toán hợp và giao, nhưng có thêm lợi thế về tính bất biến.
immutable_set = frozenset([1, 2, 3])
Để tìm hiểu thêm, hãy xem hướng dẫn tuyệt vời về Python Sets và Lý thuyết Tập hợp.
5. Kiểu Dữ liệu Boolean
Trong nhiều tình huống lập trình, chúng ta cần cách để biểu diễn giá trị chân lý. Python cung cấp kiểu dữ liệu Boolean, đóng vai trò trong việc ra quyết định và luồng điều khiển.
5.1. Boolean
Giá trị logic, hoặc True hoặc False. Những giá trị này thường được dùng trong quá trình ra quyết định, như câu lệnh điều kiện và vòng lặp.
Boolean là nền tảng cho điều khiển luồng trong lập trình, cho phép bạn viết mã phản ứng linh hoạt dựa trên điều kiện.
Trong Python, giá trị Boolean cũng có thể là kết quả của so sánh (ví dụ, 5 > 3 cho kết quả True) hoặc các phép logic (ví dụ, True and False cho kết quả False).
is_active = True
6. NoneType
Bên cạnh các kiểu số, dãy, ánh xạ, tập hợp và Boolean, Python còn có một kiểu dữ liệu đặc biệt để biểu diễn sự vắng mặt của giá trị.
6.1 None (NoneType)
Biểu diễn sự vắng mặt của giá trị hoặc giá trị null.
Kiểu None thường được dùng như giá trị giữ chỗ, biến chưa khởi tạo, hoặc giá trị trả về mặc định của các hàm không trả về gì cụ thể.
Nó hữu ích đặc biệt trong các trường hợp một thao tác có thể không tạo ra kết quả hoặc khi cần định nghĩa biến mà chưa có giá trị ban đầu.
result = None
Kiểu Dữ liệu Nâng cao và Thư viện Bên ngoài
Vượt ra ngoài các kiểu tích hợp cơ bản, Python cũng cung cấp các kiểu dữ liệu nâng cao để xử lý những trường hợp chuyên biệt hơn. Hãy xem các kiểu phổ biến nhất.
1. Đối tượng byte
Đối tượng byte được thiết kế riêng để xử lý dữ liệu nhị phân, bao gồm tệp, đa phương tiện và gói mạng. Các kiểu dữ liệu này đặc biệt hữu ích khi làm việc với dữ liệu phi văn bản.
Kiểu bytes là bất biến, phù hợp cho các thao tác chỉ đọc, trong khi bytearray cung cấp lựa chọn có thể thay đổi cho các tình huống cần chỉnh sửa. Kiểu memory view cho phép truy cập bộ đệm dữ liệu nội bộ của đối tượng mà không cần sao chép, cải thiện hiệu năng trong các ứng dụng tiêu tốn bộ nhớ.
data = b"hello" # Immutable bytes object
mutable_data = bytearray(b"hello") # Mutable bytearray object
view = memoryview(mutable_data) # Memoryview of the bytearray
2. Mảng NumPy
Mảng NumPy là các mảng đa chiều hiệu năng cao được thiết kế cho tính toán số.
Không giống list trong Python, mảng NumPy cho hiệu năng vượt trội và được tối ưu cho các phép toán toán học. Chúng là nền tảng trong tính toán khoa học, hỗ trợ các tác vụ như đại số tuyến tính, biến đổi Fourier và phân tích thống kê.
Chúng hỗ trợ broadcasting, cho phép thực hiện phép toán trên các mảng có hình dạng khác nhau, tăng thêm tính linh hoạt.
import numpy as np
# Creating a 1D array
data = np.array([1, 2, 3, 4])
# Creating a 2D array
data_2d = np.array([[1, 2], [3, 4]])
# Performing element-wise operations
squared = data ** 2
Nếu bạn muốn tìm hiểu thêm về NumPy, hãy đăng ký khóa học miễn phí cho người mới bắt đầu Introduction to NumPy.
3. Pandas DataFrame
Pandas DataFrame là cấu trúc dữ liệu dạng bảng cung cấp các công cụ mạnh mẽ để thao tác và phân tích dữ liệu. Với các hàng và cột có nhãn, chúng giúp xử lý dữ liệu có cấu trúc trở nên trực quan và hiệu quả.
DataFrame là thành phần không thể thiếu trong quy trình khoa học dữ liệu, cho phép các tác vụ như lọc, nhóm, gộp và tổng hợp các tập dữ liệu lớn. Ngoài ra, chúng tích hợp mượt mà với các thư viện khác, khiến pandas trở nên không thể thiếu cho phân tích dữ liệu hiện đại.
import pandas as pd
# Creating a simple DataFrame
data = pd.DataFrame({"Name": ["Alice", "Bob"], "Age": [25, 30]})
# Filtering rows based on a condition
adults = data[data["Age"] > 18]
# Adding a new column
data["IsAdult"] = data["Age"] > 18
# show data
data

Pandas DataFrame hiển thị trong notebook
Xem pandas cheat sheet với các mẫu mã, là tài liệu tham khảo nhanh cho việc xử lý dữ liệu với pandas.
Nếu bạn muốn học thêm về thao tác dữ liệu nâng cao bằng Pandas DataFrame, hãy đăng ký khóa học miễn phí Data Manipulation with pandas.
Chuyển đổi Kiểu trong Python
Chuyển đổi kiểu đề cập đến quá trình chuyển một giá trị từ kiểu dữ liệu này sang kiểu khác. Trong lập trình, điều này thường cần thiết để đảm bảo các phép toán được thực hiện đúng và dữ liệu có thể được thao tác theo cách mong muốn.
Cách Python xử lý chuyển đổi kiểu rất linh hoạt, cung cấp cả phương pháp tự động (ngầm định) và thủ công (tường minh).
1. Chuyển đổi kiểu ngầm định
Python tự động chuyển kiểu dữ liệu này sang kiểu khác trong các biểu thức khi một kiểu nhỏ hơn hoặc kém chính xác hơn được kết hợp với một kiểu lớn hơn hoặc chính xác hơn.
Ví dụ, kết hợp một int với một float sẽ cho ra float, đảm bảo không mất độ chính xác trong tính toán.
result = 5 + 3.5
print(result)
>>> 8.5 # This is a float
2. Chuyển đổi kiểu tường minh
Chuyển đổi kiểu tường minh, hay ép kiểu, cho phép bạn tự chuyển một giá trị từ kiểu này sang kiểu khác bằng các hàm tích hợp như int(), float(), str() và hơn thế nữa.
Điều này hữu ích khi chuyển đổi ngầm định không xảy ra hoặc khi làm việc với các kiểu như chuỗi cần được chuyển tường minh để thực hiện phép toán số học.
num = int("10") # Converts string to integer
price = float("19.99") # Converts string to float
text = str(123) # Converts integer to string
Thực hành Tốt khi Làm việc với Kiểu Dữ liệu trong Python
Hiểu các kiểu dữ liệu của Python chỉ là bước đầu—việc sử dụng chúng hiệu quả mới là chìa khóa để viết mã sạch, hiệu quả và dễ bảo trì. Dưới đây là một số thực hành tốt cần ghi nhớ khi làm việc với kiểu dữ liệu.
Dùng đúng kiểu cho đúng nhiệm vụ
Chọn các kiểu phù hợp với tác vụ của bạn. Ví dụ, dùng set khi cần đảm bảo phần tử duy nhất, list cho các tập hợp có thứ tự, và tuple cho các dãy bất biến.
Việc lựa chọn kiểu dữ liệu một cách có chủ đích giúp mã của bạn hiệu quả và dễ đọc, dễ bảo trì hơn.
Xác thực kiểu đầu vào
Đảm bảo dữ liệu đầu vào đúng kiểu kỳ vọng có thể ngăn lỗi thời gian chạy và cải thiện độ tin cậy của mã.
Hàm isinstance() của Python là cách đơn giản để xác thực kiểu. Thực hành này đặc biệt quan trọng trong các ứng dụng nhận đầu vào động, như từ biểu mẫu người dùng hoặc API.
if not isinstance(age, int):
raise ValueError("Age must be an integer")
Dùng thư viện cho kiểu phức tạp
Các thư viện Python như NumPy và pandas là không thể thiếu cho thao tác và tính toán dữ liệu nâng cao.
Như chúng ta đã thấy, NumPy cung cấp các mảng đa chiều nhanh cho phép toán số học, trong khi pandas vượt trội ở xử lý và chuyển đổi dữ liệu có cấu trúc một cách hiệu quả. Tận dụng các thư viện này có thể giảm đáng kể độ phức tạp của mã và nâng cao hiệu năng.
Kết luận
Hiểu các kiểu dữ liệu của Python là bước đầu để lập trình và thao tác dữ liệu hiệu quả. Các kiểu dữ liệu là nền tảng cho tính linh hoạt của Python, cho phép bạn xử lý nhiều loại dữ liệu với độ chính xác và dễ dàng.
Bằng cách nắm vững các kiểu tích hợp sẵn và khám phá các thư viện nâng cao như NumPy và pandas, bạn đang trên con đường trở thành người dùng Python thành thạo và giải quyết các vấn đề thực tế trong khoa học dữ liệu, phân tích dữ liệu, phân tích tài chính, trí tuệ nhân tạo và nhiều hơn nữa!
Nếu bạn muốn đào sâu kiến thức, hãy xem khóa Introduction to Python for Developers, khóa học này bao quát các khái niệm Python thiết yếu qua thực hành. Để có lộ trình học có hệ thống xây dựng kỹ năng Python từ nền tảng, hãy cân nhắc lộ trình Python Data Fundamentals.
Câu hỏi thường gặp
Tôi nên dùng kiểu dữ liệu Python nào cho các phép tính số lớn?
Với các phép tính số lớn, dùng float cho giá trị thập phân và int cho số nguyên. Nếu bạn cần độ chính xác cao hơn nữa, hãy cân nhắc dùng các mô-đun decimal hoặc fractions.
Các kiểu dữ liệu của Python ảnh hưởng đến bộ nhớ và hiệu năng như thế nào?
Các kiểu dữ liệu khác nhau có mức sử dụng bộ nhớ và ảnh hưởng hiệu năng khác nhau. Ví dụ, list tốn nhiều bộ nhớ hơn tuple do tính động, trong khi set cho tra cứu nhanh hơn list với các tập dữ liệu lớn. Dùng đúng kiểu cho đúng tác vụ có thể tối ưu hiệu năng.
Python xử lý số nguyên lớn khác gì so với các ngôn ngữ khác?
Không giống nhiều ngôn ngữ có kiểu số nguyên kích thước cố định, Python tự động hỗ trợ số nguyên độ chính xác tùy ý (int), nghĩa là số có thể tăng kích thước mà không bị tràn. Tuy nhiên, điều này có thể tạo ra chi phí hiệu năng so với các kiểu số nguyên độ rộng cố định trong ngôn ngữ như C hoặc Java.
Cách tốt nhất để lưu dữ liệu có cấu trúc trong Python là gì?
Với dữ liệu có cấu trúc đơn giản, dictionary (dict) thường là lựa chọn tốt. Với dữ liệu dạng bảng phức tạp hơn, nên dùng thư viện bên ngoài như pandas.DataFrame vì nó cung cấp khả năng thao tác dữ liệu mạnh mẽ.
Vì sao nên ưu tiên isinstance() hơn type() để kiểm tra kiểu?
isinstance(obj, type) hỗ trợ kế thừa, nghĩa là nó nhận diện đúng các thể hiện của lớp con, trong khi type(obj) == type chỉ khớp kiểu chính xác. Điều này khiến isinstance() linh hoạt và đáng tin cậy hơn trong lập trình hướng đối tượng.
Ưu nhược điểm khi dùng defaultdict so với dict trong Python là gì?
defaultdict (từ mô-đun collections) tự động khởi tạo khóa thiếu với giá trị mặc định, tránh KeyError. Nó hữu ích khi làm việc với dữ liệu được nhóm, nhưng có thể tạo ra hành vi không mong muốn nếu không xử lý cẩn thận các giá trị mặc định.
