Khi bắt đầu học Python, kiểu dữ liệu là một trong những kiến thức nền tảng mà bạn nên nắm vững ngay từ đầu. Mọi chương trình đều làm việc với dữ liệu: có thể là tên người dùng, tuổi, điểm số, giá sản phẩm, danh sách sản phẩm hay trạng thái đăng nhập. Python cung cấp nhiều kiểu dữ liệu khác nhau để biểu diễn và xử lý những thông tin này.
Một điểm khá thú vị của Python là bạn không cần khai báo kiểu dữ liệu trước khi tạo biến. Chỉ cần gán một giá trị, Python sẽ tự xác định kiểu dữ liệu tương ứng.
Ví dụ:
age = 20
name = "Nguyen Van A"
score = 8.5
is_student = True
Trong đoạn mã trên, age là số nguyên, name là chuỗi, score là số thực và is_student là giá trị Boolean.
Chính sự linh hoạt này khiến Python trở thành một ngôn ngữ tương đối dễ tiếp cận với người mới. Tuy nhiên, đừng vì Python tự động xác định kiểu dữ liệu mà xem nhẹ kiến thức này. Hiểu rõ từng loại dữ liệu sẽ giúp bạn biết cách lưu trữ, xử lý và lựa chọn cấu trúc dữ liệu phù hợp khi xây dựng chương trình.
Trong bài viết này, chúng ta sẽ lần lượt tìm hiểu các loại dữ liệu cơ bản trong Python, đặc điểm của từng kiểu, cách sử dụng và những tình huống thực tế nên áp dụng chúng.
1. Kiểu dữ liệu trong Python là gì?
Kiểu dữ liệu (Data Type) là cách Python phân loại và xác định bản chất của một giá trị. Mỗi kiểu dữ liệu có những đặc điểm và cách xử lý riêng.
Ví dụ, số 100 là một số nguyên, "Python" là một chuỗi và True là một giá trị Boolean.
Python có nhiều kiểu dữ liệu khác nhau. Trong phạm vi cơ bản, bạn sẽ thường xuyên làm việc với:
| Kiểu dữ liệu | Mô tả | Ví dụ |
|---|---|---|
int | Số nguyên | 100 |
float | Số thực | 3.14 |
complex | Số phức | 2 + 3j |
bool | Đúng hoặc sai | True |
str | Chuỗi ký tự | "Python" |
list | Danh sách | [1, 2, 3] |
tuple | Bộ dữ liệu | (1, 2, 3) |
set | Tập hợp | {1, 2, 3} |
dict | Dữ liệu dạng key-value | {"name": "An"} |
NoneType | Không có giá trị cụ thể | None |
Việc phân biệt kiểu dữ liệu rất quan trọng vì cùng một toán tử nhưng khi áp dụng cho những kiểu dữ liệu khác nhau, Python có thể cho kết quả hoàn toàn khác.
Ví dụ với số:
a = 10
b = 20
print(a + b)
Kết quả:
30
Nhưng nếu sử dụng chuỗi:
a = "Hello "
b = "Python"
print(a + b)
Kết quả:
Hello Python
Trong trường hợp này, toán tử + được sử dụng để cộng hai số nhưng lại được sử dụng để nối hai chuỗi.
1.1. Python xác định kiểu dữ liệu như thế nào?
Python thuộc nhóm ngôn ngữ dynamic typing. Điều này có nghĩa là bạn không cần khai báo kiểu của biến trước khi gán giá trị.
Ví dụ:
x = 10
Python xác định x đang tham chiếu đến một đối tượng kiểu int.
Sau đó, bạn hoàn toàn có thể gán một chuỗi cho biến này:
x = "Python"
Lúc này, x tham chiếu đến một đối tượng kiểu str.
Điều này khác với một số ngôn ngữ lập trình yêu cầu bạn khai báo kiểu dữ liệu ngay từ đầu.
Tuy nhiên, dynamic typing không có nghĩa là Python không quan tâm đến kiểu dữ liệu. Mỗi giá trị trong Python vẫn thuộc một kiểu cụ thể và các phép toán được thực hiện dựa trên kiểu của đối tượng đó.
1.2. Kiểm tra kiểu dữ liệu bằng type()
Khi muốn biết một giá trị thuộc kiểu dữ liệu nào, bạn có thể sử dụng hàm type().
Ví dụ:
age = 20
name = "Python"
score = 9.5
print(type(age))
print(type(name))
print(type(score))
Kết quả:
<class 'int'>
<class 'str'>
<class 'float'>
type() đặc biệt hữu ích khi bạn đang học Python hoặc xử lý dữ liệu từ những nguồn bên ngoài như file, API hay dữ liệu người dùng nhập vào.
1.3. Chuyển đổi kiểu dữ liệu trong Python
Trong quá trình lập trình, bạn sẽ thường xuyên gặp trường hợp cần chuyển một giá trị từ kiểu dữ liệu này sang kiểu khác. Đây được gọi là type conversion hoặc type casting.
Một số hàm chuyển đổi phổ biến gồm:
int()chuyển sang số nguyên.float()chuyển sang số thực.str()chuyển sang chuỗi.bool()chuyển sang Boolean.
Ví dụ, một số đang được lưu dưới dạng chuỗi:
number = "100"
number = int(number)
print(number)
print(type(number))
Kết quả:
100
<class 'int'>
Tuy nhiên, không phải dữ liệu nào cũng có thể chuyển đổi thành công.
Ví dụ:
number = "Python"
number = int(number)
Đoạn mã này sẽ phát sinh lỗi vì "Python" không phải là một chuỗi biểu diễn số nguyên hợp lệ.
Do đó, khi chuyển đổi kiểu dữ liệu, bạn cần hiểu rõ dữ liệu đầu vào và kiểm tra những trường hợp có thể gây lỗi.
2. Kiểu số trong Python
Python cung cấp ba kiểu dữ liệu số cơ bản:
int: số nguyên.float: số thực.complex: số phức.
Trong đó, int và float là hai kiểu bạn sẽ sử dụng thường xuyên nhất khi mới học Python.
2.1. Kiểu int – số nguyên
int được sử dụng để biểu diễn các số nguyên, bao gồm số nguyên dương, số nguyên âm và số 0.
Ví dụ:
age = 25
quantity = 100
temperature = -5
Bạn có thể thực hiện các phép tính cơ bản với kiểu int:
a = 10
b = 3
print(a + b)
print(a - b)
print(a * b)
print(a // b)
print(a % b)
Trong Python, kiểu int có khả năng biểu diễn những số nguyên rất lớn mà không yêu cầu bạn phải khai báo trước kích thước cố định.
Ví dụ:
number = 999999999999999999999999999999
print(number)
Python vẫn có thể xử lý giá trị này dưới dạng số nguyên.
Đây là một trong những điểm khá thuận tiện khi làm việc với các bài toán yêu cầu xử lý số nguyên lớn.
2.2. Kiểu float – số thực
float được sử dụng để biểu diễn các số có phần thập phân.
Ví dụ:
price = 199.99
height = 1.75
temperature = -3.5
Bạn có thể thực hiện các phép tính với float như bình thường:
price = 19.5
quantity = 3
total = price * quantity
print(total)
Kết quả:
58.5
Một vấn đề mà người mới học Python khá dễ gặp là sai số khi thực hiện phép tính với số thực.
Hãy thử:
print(0.1 + 0.2)
Bạn có thể nhận được:
0.30000000000000004
Thoạt nhìn, kết quả này khá khó hiểu vì về mặt toán học, 0.1 + 0.2 rõ ràng bằng 0.3.
Nguyên nhân nằm ở cách máy tính biểu diễn số thực bằng hệ nhị phân. Đây không phải lỗi riêng của Python mà là vấn đề phổ biến trong tính toán số thực trên máy tính.
Với các ứng dụng yêu cầu độ chính xác cao, đặc biệt là những bài toán tài chính, không nên tùy tiện sử dụng float mà cần cân nhắc những giải pháp phù hợp hơn như Decimal.
2.3. Kiểu complex – số phức
complex được sử dụng để biểu diễn số phức. Một số phức trong Python có thể được viết như sau:
z = 2 + 3j
Trong đó:
2là phần thực.3jlà phần ảo.
Bạn có thể lấy từng thành phần bằng thuộc tính real và imag:
z = 2 + 3j
print(z.real)
print(z.imag)
Kết quả:
2.0
3.0
Trong những chương trình thông thường như website, phần mềm quản lý hay ứng dụng xử lý dữ liệu, bạn có thể hiếm khi sử dụng complex. Tuy nhiên, kiểu dữ liệu này khá hữu ích trong các lĩnh vực như toán học, kỹ thuật, vật lý hoặc tính toán khoa học.
2.4. So sánh int, float và complex
| Kiểu dữ liệu | Ví dụ | Mục đích |
|---|---|---|
int | 100 | Biểu diễn số nguyên |
float | 3.14 | Biểu diễn số thực |
complex | 2 + 3j | Biểu diễn số phức |
Nếu bạn mới bắt đầu học Python, hãy tập trung làm quen thật chắc với int và float trước. Đây là hai kiểu số xuất hiện rất thường xuyên trong các bài toán lập trình cơ bản.
3. Kiểu Boolean – bool
Boolean là kiểu dữ liệu dùng để biểu diễn hai trạng thái:
True
False
True có nghĩa là đúng và False có nghĩa là sai.
Lưu ý rằng Python phân biệt chữ hoa và chữ thường. Vì vậy, True và False là hợp lệ, trong khi true và false không phải cách viết đúng của Boolean trong Python.
3.1. Boolean được sử dụng để làm gì?
Boolean thường xuất hiện trong các phép so sánh và câu lệnh điều kiện.
Ví dụ:
age = 20
print(age >= 18)
Kết quả:
True
Kết quả này có thể được sử dụng trực tiếp với if:
age = 20
if age >= 18:
print("Bạn đã đủ tuổi.")
Trong các chương trình thực tế, Boolean thường được dùng để biểu diễn trạng thái.
Ví dụ:
is_logged_in = True
is_admin = False
is_active = True
Cách đặt tên như is_active, is_admin, is_logged_in khá phổ biến vì chỉ cần nhìn tên biến, bạn đã có thể hình dung giá trị của nó sẽ là True hoặc False.
3.2. Giá trị Truthy và Falsy
Một đặc điểm khá tiện lợi của Python là trong ngữ cảnh Boolean, nhiều giá trị khác nhau có thể được đánh giá là True hoặc False.
Một số giá trị thường được xem là Falsy gồm:
FalseNone00.0""[]{}set()
Ví dụ:
name = ""
if name:
print("Có tên.")
else:
print("Tên đang trống.")
Kết quả:
Tên đang trống.
Cách viết này xuất hiện rất thường xuyên trong Python. Thay vì kiểm tra một chuỗi có bằng "" hay không, bạn có thể kiểm tra trực tiếp biến đó trong điều kiện.
4. Kiểu chuỗi – str
Nếu int và float được sử dụng để biểu diễn số thì str được sử dụng để biểu diễn văn bản.
Ví dụ:
name = "Python"
message = "Hello World"
Bạn có thể tạo chuỗi bằng dấu nháy đơn hoặc dấu nháy kép:
name = 'Python'
language = "Python"
Cả hai cách đều hợp lệ.
Bạn cũng có thể sử dụng ba dấu nháy để tạo chuỗi nhiều dòng:
message = """Python là một ngôn ngữ lập trình.
Python có cú pháp đơn giản và dễ đọc."""
4.1. Truy cập ký tự trong chuỗi
Mỗi ký tự trong chuỗi có một vị trí được gọi là index. Python bắt đầu đánh số index từ 0.
Ví dụ:
language = "Python"
print(language[0])
print(language[1])
Kết quả:
P
y
Bạn cũng có thể sử dụng index âm để truy cập từ cuối chuỗi:
language = "Python"
print(language[-1])
Kết quả:
n
Trong đó, -1 là ký tự cuối cùng, -2 là ký tự đứng trước đó.
4.2. Cắt chuỗi bằng slicing
Slicing cho phép bạn lấy một phần của chuỗi.
Ví dụ:
text = "Python Programming"
print(text[0:6])
Kết quả:
Python
Bạn cũng có thể bỏ qua vị trí bắt đầu hoặc kết thúc:
text = "Python Programming"
print(text[:6])
print(text[7:])
Slicing là một kỹ thuật quan trọng trong Python vì không chỉ chuỗi mà nhiều kiểu dữ liệu dạng sequence khác cũng hỗ trợ cách truy cập tương tự.
4.3. Một số phương thức xử lý chuỗi phổ biến
Python cung cấp rất nhiều phương thức để xử lý chuỗi.
Ví dụ:
text = " Hello Python "
print(text.upper())
print(text.lower())
print(text.strip())
Một số phương thức bạn nên làm quen gồm:
| Phương thức | Công dụng |
|---|---|
upper() | Chuyển thành chữ hoa |
lower() | Chuyển thành chữ thường |
strip() | Loại bỏ khoảng trắng đầu và cuối |
replace() | Thay thế nội dung |
split() | Tách chuỗi |
join() | Nối các chuỗi |
find() | Tìm vị trí của chuỗi con |
startswith() | Kiểm tra phần bắt đầu |
endswith() | Kiểm tra phần kết thúc |
Ví dụ với replace():
text = "Python is easy"
text = text.replace("easy", "powerful")
print(text)
Kết quả:
Python is powerful
4.4. Định dạng chuỗi bằng f-string
f-string là một cách rất tiện lợi để chèn giá trị của biến vào trong chuỗi.
Ví dụ:
name = "An"
age = 22
message = f"Tôi tên là {name}, năm nay tôi {age} tuổi."
print(message)
Kết quả:
Tôi tên là An, năm nay tôi 22 tuổi.
Khi viết các chương trình Python hiện đại, bạn sẽ gặp f-string rất thường xuyên, đặc biệt khi cần hiển thị thông tin, tạo thông báo hoặc xây dựng nội dung động.
4.5. Chuỗi là kiểu dữ liệu immutable
Một đặc điểm quan trọng của str là chuỗi thuộc nhóm immutable, tức là không thể thay đổi trực tiếp nội dung của object chuỗi sau khi nó được tạo.
Ví dụ sau sẽ gây lỗi:
text = "Python"
text[0] = "J"
Nếu muốn tạo một chuỗi mới, bạn cần xây dựng lại giá trị:
text = "Python"
text = "J" + text[1:]
print(text)
Kết quả:
Jython
Khái niệm immutable sẽ trở nên quan trọng hơn khi bạn tìm hiểu về object, biến và cách Python quản lý bộ nhớ.
5. Kiểu danh sách – list
list là một trong những kiểu dữ liệu quan trọng và được sử dụng nhiều nhất trong Python. List cho phép bạn lưu nhiều giá trị trong cùng một cấu trúc.
Ví dụ:
fruits = ["apple", "banana", "orange"]
List có thứ tự và có thể thay đổi sau khi được tạo.
5.1. Truy cập phần tử trong List
Tương tự chuỗi, List sử dụng index bắt đầu từ 0.
fruits = ["apple", "banana", "orange"]
print(fruits[0])
print(fruits[-1])
Kết quả:
apple
orange
5.2. Thêm phần tử vào List
Bạn có thể sử dụng append() để thêm phần tử vào cuối danh sách:
fruits = ["apple", "banana", "orange"]
fruits.append("mango")
print(fruits)
Kết quả:
['apple', 'banana', 'orange', 'mango']
Nếu muốn thêm phần tử vào một vị trí cụ thể, có thể sử dụng insert():
fruits = ["apple", "banana", "orange"]
fruits.insert(1, "grape")
print(fruits)
Bạn cũng có thể thêm nhiều phần tử bằng extend():
fruits = ["apple", "banana"]
fruits.extend(["orange", "mango"])
print(fruits)
5.3. Sửa và xóa phần tử
Vì List là mutable nên bạn có thể thay đổi phần tử trực tiếp:
fruits = ["apple", "banana", "orange"]
fruits[1] = "mango"
print(fruits)
Xóa một phần tử theo giá trị:
fruits = ["apple", "banana", "orange"]
fruits.remove("banana")
Hoặc xóa theo vị trí:
fruits = ["apple", "banana", "orange"]
fruits.pop(0)
Nếu muốn xóa toàn bộ phần tử:
fruits.clear()
5.4. List có thể chứa nhiều kiểu dữ liệu
Python cho phép một List chứa nhiều kiểu dữ liệu khác nhau:
data = [10, "Python", True, 3.14]
Tuy nhiên, trong các chương trình thực tế, bạn nên tổ chức dữ liệu một cách có chủ đích. Việc trộn quá nhiều kiểu dữ liệu không liên quan trong một List có thể khiến chương trình khó đọc và khó bảo trì.
5.5. Khi nào nên sử dụng List?
Bạn nên sử dụng List khi cần:
- Lưu nhiều phần tử có thứ tự.
- Thêm hoặc xóa dữ liệu thường xuyên.
- Truy cập dữ liệu bằng index.
- Duyệt qua một tập hợp dữ liệu.
Ví dụ:
products = ["Laptop", "Mouse", "Keyboard", "Monitor"]
Đây là trường hợp rất phù hợp để sử dụng List.
6. Kiểu Tuple – tuple
Tuple có nhiều điểm tương đồng với List nhưng có một khác biệt quan trọng: Tuple là immutable.
Tuple thường được tạo bằng dấu ngoặc tròn:
coordinates = (10, 20)
Bạn có thể truy cập phần tử:
print(coordinates[0])
print(coordinates[1])
Nhưng không thể thay đổi trực tiếp phần tử:
coordinates[0] = 100
Đoạn mã trên sẽ gây lỗi vì Tuple không cho phép thay đổi phần tử sau khi được tạo.
6.1. Tuple khác List như thế nào?
| Đặc điểm | List | Tuple |
|---|---|---|
| Cú pháp | [1, 2, 3] | (1, 2, 3) |
| Có thứ tự | Có | Có |
| Có thể thay đổi | Có | Không |
| Hỗ trợ index | Có | Có |
| Hỗ trợ slicing | Có | Có |
Một cách dễ nhớ là:
List phù hợp với dữ liệu thường xuyên thay đổi, còn Tuple phù hợp với dữ liệu có cấu trúc cố định.
Ví dụ, một điểm tọa độ có thể được biểu diễn bằng:
point = (10, 20)
Nếu chương trình chỉ cần lưu cặp tọa độ này và không cần thay đổi nó, Tuple là một lựa chọn hợp lý.
6.2. Khi nào nên sử dụng Tuple?
Tuple thường được sử dụng khi:
- Dữ liệu không nên thay đổi.
- Cần biểu diễn một nhóm giá trị cố định.
- Muốn thể hiện rõ rằng dữ liệu có tính chất bất biến.
Một số ví dụ có thể kể đến như tọa độ (x, y), kích thước (width, height) hoặc một nhóm thông tin cố định.
7. Kiểu Set – set
set là kiểu dữ liệu dùng để lưu một tập hợp các phần tử không trùng lặp.
Ví dụ:
numbers = {1, 2, 3, 4}
Nếu bạn tạo Set với những phần tử bị trùng:
numbers = {1, 2, 2, 3, 3, 4}
print(numbers)
Python sẽ loại bỏ các phần tử trùng lặp.
Kết quả sẽ có dạng:
{1, 2, 3, 4}
7.1. Đặc điểm của Set
Set có một số đặc điểm quan trọng:
- Không lưu các phần tử trùng lặp.
- Không sử dụng index để truy cập phần tử.
- Có thể thêm hoặc xóa phần tử.
- Rất phù hợp với các phép toán tập hợp.
Do đó, nếu bạn cần một cấu trúc dữ liệu trong đó mỗi phần tử phải là duy nhất, Set là một lựa chọn đáng cân nhắc.
7.2. Thêm và xóa phần tử trong Set
Thêm một phần tử:
numbers = {1, 2, 3}
numbers.add(4)
Thêm nhiều phần tử:
numbers = {1, 2, 3}
numbers.update([4, 5, 6])
Xóa phần tử bằng remove():
numbers = {1, 2, 3}
numbers.remove(2)
Bạn cũng có thể sử dụng discard():
numbers = {1, 2, 3}
numbers.discard(5)
Điểm khác biệt đáng chú ý là discard() không gây lỗi nếu phần tử cần xóa không tồn tại.
7.3. Các phép toán tập hợp
Set đặc biệt hữu ích khi thực hiện các phép toán tập hợp như hợp, giao và hiệu.
Ví dụ:
a = {1, 2, 3}
b = {3, 4, 5}
print(a | b)
print(a & b)
print(a - b)
Trong đó:
|là phép hợp.&là phép giao.-là phép hiệu.
7.4. Khi nào nên sử dụng Set?
Set rất phù hợp khi bạn cần:
- Loại bỏ dữ liệu trùng lặp.
- Kiểm tra sự tồn tại của một phần tử.
- Thực hiện các phép toán tập hợp.
Ví dụ, bạn có danh sách tên người dùng nhưng có một số tên xuất hiện nhiều lần:
names = ["An", "Binh", "An", "Cuong", "Binh"]
unique_names = set(names)
print(unique_names)
Set sẽ giúp loại bỏ các giá trị trùng lặp.
8. Kiểu Dictionary – dict
Dictionary, thường viết tắt là dict, là kiểu dữ liệu dùng để lưu thông tin theo dạng key-value.
Ví dụ:
student = {
"name": "An",
"age": 20,
"score": 8.5
}
Trong đó:
"name","age","score"là các key."An",20,8.5là các value.
Nếu List tổ chức dữ liệu dựa trên vị trí thì Dictionary tổ chức dữ liệu dựa trên key. Đây là lý do Dictionary đặc biệt phù hợp để biểu diễn những đối tượng có nhiều thuộc tính.
8.1. Truy cập dữ liệu trong Dictionary
Bạn có thể truy cập value thông qua key:
student = {
"name": "An",
"age": 20,
"score": 8.5
}
print(student["name"])
print(student["score"])
Ngoài ra, bạn có thể sử dụng get():
print(student.get("name"))
get() hữu ích khi bạn không chắc key có tồn tại hay không.
Ví dụ:
print(student.get("email"))
Nếu key "email" không tồn tại, get() sẽ trả về None nếu bạn không cung cấp giá trị mặc định.
8.2. Thêm và cập nhật dữ liệu
Bạn có thể thêm một key mới:
student["class"] = "Python"
Hoặc cập nhật value của key đã tồn tại:
student["age"] = 21
Đây là lý do Dictionary rất phù hợp để lưu thông tin có nhiều thuộc tính.
8.3. Xóa dữ liệu trong Dictionary
Bạn có thể sử dụng pop():
student.pop("age")
Hoặc sử dụng del:
del student["score"]
Nếu muốn xóa toàn bộ dữ liệu:
student.clear()
8.4. Duyệt Dictionary
Bạn có thể duyệt qua cả key và value bằng items():
student = {
"name": "An",
"age": 20,
"score": 8.5
}
for key, value in student.items():
print(key, value)
Kết quả:
name An
age 20
score 8.5
Đây là cách làm rất phổ biến khi xử lý dữ liệu Dictionary.
8.5. Khi nào nên sử dụng Dictionary?
Dictionary phù hợp khi dữ liệu có mối quan hệ rõ ràng giữa thuộc tính và giá trị.
Ví dụ:
product = {
"name": "Laptop",
"price": 15000000,
"quantity": 5
}
So với việc sử dụng List:
product = ["Laptop", 15000000, 5]
Dictionary dễ đọc hơn rất nhiều. Chỉ cần nhìn vào code, bạn có thể biết 15000000 là giá sản phẩm và 5 là số lượng.
Dictionary cũng xuất hiện rất thường xuyên khi làm việc với JSON, API, dữ liệu cấu hình và nhiều ứng dụng Python thực tế khác.
9. Kiểu NoneType và giá trị None
None là một giá trị đặc biệt trong Python, thường được sử dụng để biểu diễn trạng thái không có giá trị cụ thể.
Ví dụ:
result = None
Nếu kiểm tra kiểu dữ liệu:
print(type(result))
Kết quả:
<class 'NoneType'>
Điều đó có nghĩa result thuộc kiểu NoneType.
Điều quan trọng cần nhớ là None không giống 0, False hay chuỗi rỗng.
9.1. Kiểm tra None
Khi kiểm tra xem một biến có phải None hay không, cách viết phù hợp là sử dụng is None.
value = None
if value is None:
print("Không có dữ liệu")
is và == không hoàn toàn giống nhau. == dùng để so sánh giá trị, trong khi is kiểm tra identity của object.
Với None, cách viết:
if value is None:
...
là cách thể hiện rõ ràng và phù hợp với Python.
9.2. Một số trường hợp sử dụng None
Bạn sẽ gặp None trong khá nhiều tình huống.
Ví dụ, một hàm có thể không tìm thấy dữ liệu:
def find_user():
return None
user = find_user()
if user is None:
print("Không tìm thấy người dùng.")
None cũng thường được sử dụng để biểu diễn dữ liệu chưa được thiết lập hoặc chưa có kết quả.
10. So sánh các loại dữ liệu cơ bản trong Python
Sau khi tìm hiểu từng kiểu dữ liệu, hãy tổng hợp lại để dễ ghi nhớ hơn.
| Kiểu dữ liệu | Ví dụ | Mutable? | Mục đích |
|---|---|---|---|
int | 10 | Không | Số nguyên |
float | 3.14 | Không | Số thực |
complex | 2+3j | Không | Số phức |
bool | True | Không | Đúng/Sai |
str | "Python" | Không | Văn bản |
list | [1, 2, 3] | Có | Danh sách |
tuple | (1, 2, 3) | Không | Nhóm dữ liệu cố định |
set | {1, 2, 3} | Có | Tập hợp không trùng |
dict | {"a": 1} | Có | Key-value |
NoneType | None | Không | Không có giá trị |
10.1. Mutable và Immutable là gì?
Đây là hai khái niệm bạn nên bắt đầu làm quen khi học các kiểu dữ liệu trong Python.
Immutable có nghĩa là object không thể thay đổi trực tiếp sau khi được tạo.
Một số kiểu immutable gồm:
intfloatcomplexboolstrtuple
Trong khi đó, các kiểu:
listsetdict
là mutable, tức có thể thay đổi nội dung sau khi được tạo.
Ví dụ với List:
numbers = [1, 2, 3]
numbers.append(4)
print(numbers)
Kết quả:
[1, 2, 3, 4]
List ban đầu đã được thay đổi.
Hiểu được mutable và immutable sẽ giúp bạn giải thích được nhiều hành vi của Python mà ban đầu có thể khá khó hiểu, đặc biệt khi làm việc với biến và tham chiếu.
11. Cách lựa chọn kiểu dữ liệu phù hợp trong Python
Biết định nghĩa từng kiểu dữ liệu là chưa đủ. Khi lập trình, điều quan trọng hơn là bạn phải biết nên sử dụng kiểu dữ liệu nào cho từng tình huống.
11.1. Khi nào nên dùng List?
Hãy sử dụng List khi bạn cần một tập hợp dữ liệu:
- Có thứ tự.
- Có thể thay đổi.
- Có thể thêm, sửa hoặc xóa phần tử.
Ví dụ:
students = ["An", "Binh", "Cuong"]
Nếu danh sách sinh viên có thể được cập nhật trong quá trình chương trình chạy, List là lựa chọn tự nhiên.
11.2. Khi nào nên dùng Tuple?
Tuple phù hợp với dữ liệu có cấu trúc cố định và không cần thay đổi.
Ví dụ:
coordinates = (10, 20)
Nếu hai giá trị này luôn đại diện cho tọa độ x và y, Tuple giúp thể hiện rõ rằng đây là một nhóm dữ liệu cố định.
11.3. Khi nào nên dùng Set?
Sử dụng Set khi bạn quan tâm đến việc dữ liệu không bị trùng lặp.
Ví dụ:
tags = {"python", "programming", "web"}
Set cũng phù hợp khi cần thực hiện các phép toán hợp, giao hoặc hiệu giữa các tập dữ liệu.
11.4. Khi nào nên dùng Dictionary?
Dictionary phù hợp với dữ liệu có dạng thuộc tính – giá trị.
Ví dụ:
user = {
"name": "An",
"email": "an@example.com",
"age": 25
}
Đây là kiểu dữ liệu bạn sẽ gặp rất nhiều khi làm việc với JSON hoặc API.
11.5. Khi nào nên dùng String, Number và Boolean?
Bạn có thể ghi nhớ đơn giản:
- Văn bản →
str. - Số nguyên →
int. - Số thập phân →
float. - Trạng thái đúng/sai →
bool. - Không có giá trị →
None.
Khi gặp một bài toán mới, thay vì nghĩ ngay đến cú pháp, hãy bắt đầu bằng câu hỏi: “Dữ liệu mình đang xử lý thực chất là gì?”
Cách suy nghĩ này sẽ giúp việc lựa chọn kiểu dữ liệu trở nên tự nhiên hơn.
12. Một số lỗi thường gặp khi làm việc với kiểu dữ liệu
Trong quá trình học Python, việc gặp lỗi liên quan đến kiểu dữ liệu là điều hoàn toàn bình thường. Điều quan trọng là hiểu nguyên nhân để tránh lặp lại lỗi tương tự.
12.1. Cộng chuỗi với số
Ví dụ:
age = 20
print("Tuổi: " + age)
Đoạn code trên sẽ gây lỗi vì Python không thể trực tiếp cộng một str với một int.
Bạn có thể chuyển số thành chuỗi:
age = 20
print("Tuổi: " + str(age))
Hoặc sử dụng f-string:
age = 20
print(f"Tuổi: {age}")
Trong thực tế, cách sử dụng f-string thường dễ đọc hơn.
12.2. Truy cập phần tử không tồn tại
Ví dụ với List:
numbers = [1, 2, 3]
print(numbers[5])
Index 5 không tồn tại nên Python sẽ phát sinh lỗi.
Tương tự với Dictionary:
student = {
"name": "An"
}
print(student["age"])
Key "age" không tồn tại trong Dictionary.
Trong trường hợp không chắc key có tồn tại, bạn có thể sử dụng:
print(student.get("age"))
12.3. Nhầm giữa = và ==
Đây là lỗi rất phổ biến với người mới học Python.
= được sử dụng để gán giá trị:
age = 20
Trong khi == được sử dụng để so sánh:
age == 20
Hai toán tử này có mục đích hoàn toàn khác nhau.
12.4. Nhầm giữa is và ==
== được sử dụng để so sánh giá trị:
a == b
Trong khi is được sử dụng để kiểm tra hai biến có đang tham chiếu đến cùng một object hay không.
Với None, hãy ưu tiên cách viết:
if value is None:
print("Không có dữ liệu")
12.5. Không để ý đến dữ liệu Mutable
Một lỗi khá thú vị xảy ra khi làm việc với List là nhiều biến có thể cùng tham chiếu đến một object.
Ví dụ:
a = [1, 2, 3]
b = a
b.append(4)
print(a)
Kết quả:
[1, 2, 3, 4]
Tại sao thay đổi b mà a cũng thay đổi?
Bởi vì a và b đang tham chiếu đến cùng một List.
Nếu muốn tạo một bản sao độc lập, bạn có thể sử dụng copy():
a = [1, 2, 3]
b = a.copy()
b.append(4)
print(a)
print(b)
Kết quả:
[1, 2, 3]
[1, 2, 3, 4]
Đây là một ví dụ nhỏ nhưng rất đáng nhớ khi bạn bắt đầu tìm hiểu sâu hơn về biến và object trong Python.
13. Thực hành: Kết hợp nhiều kiểu dữ liệu trong Python
Trong một chương trình thực tế, rất hiếm khi bạn chỉ sử dụng một kiểu dữ liệu duy nhất. Các kiểu dữ liệu thường được kết hợp với nhau để mô hình hóa một đối tượng hoặc một bài toán.
Hãy thử xây dựng thông tin về một sản phẩm:
product = {
"name": "Laptop",
"price": 15000000,
"quantity": 5,
"in_stock": True,
"categories": ["Computer", "Technology"]
}
Đoạn code trên sử dụng nhiều kiểu dữ liệu khác nhau.
"Laptop"làstr.15000000làint.5làint.Truelàbool.["Computer", "Technology"]làlist.- Toàn bộ
productlàdict.
Chúng ta có thể lấy thông tin sản phẩm:
print(product["name"])
print(product["price"])
print(product["quantity"])
Tính tổng giá trị hàng hóa:
total = product["price"] * product["quantity"]
print(total)
Kiểm tra sản phẩm còn hàng:
if product["in_stock"]:
print("Sản phẩm đang còn hàng.")
else:
print("Sản phẩm đã hết hàng.")
Duyệt qua các danh mục:
for category in product["categories"]:
print(category)
Qua ví dụ này, bạn có thể thấy rõ một điều: các kiểu dữ liệu trong Python không tồn tại độc lập mà thường kết hợp với nhau để giải quyết bài toán thực tế.
Một Dictionary có thể chứa List, List có thể chứa String, Dictionary có thể chứa Dictionary khác… Chính khả năng kết hợp linh hoạt này giúp Python xử lý dữ liệu rất hiệu quả.
14. Kết luận
Các loại dữ liệu cơ bản trong Python là một trong những nền tảng quan trọng nhất mà bạn cần nắm vững nếu muốn học Python một cách bài bản.
Trong bài viết này, chúng ta đã tìm hiểu:
intdùng để biểu diễn số nguyên.floatdùng để biểu diễn số thực.complexdùng cho số phức.boolbiểu diễn trạng thái đúng hoặc sai.strdùng để xử lý văn bản.listdùng để lưu danh sách dữ liệu có thể thay đổi.tuplephù hợp với những nhóm dữ liệu cố định.setdùng để lưu các phần tử không trùng lặp.dicttổ chức dữ liệu theo dạng key-value.Noneđược sử dụng để biểu diễn trạng thái không có giá trị cụ thể.
Bên cạnh việc biết cú pháp, bạn cũng cần hiểu sự khác nhau giữa mutable và immutable, bởi đây là kiến thức sẽ ảnh hưởng trực tiếp đến cách bạn làm việc với biến và object trong Python.
Nếu mới bắt đầu, bạn không cần cố ghi nhớ toàn bộ phương thức của từng kiểu dữ liệu ngay lập tức. Điều quan trọng hơn là hình thành được phản xạ với ba câu hỏi:
Dữ liệu này thuộc kiểu gì? Kiểu dữ liệu đó có đặc điểm gì? Và khi nào nên sử dụng nó?
Khi đã hiểu được những điều này, các phần kiến thức tiếp theo của Python như toán tử, câu lệnh điều kiện, vòng lặp, hàm và cấu trúc dữ liệu nâng cao sẽ trở nên dễ tiếp cận hơn rất nhiều.
Một lộ trình học Python cơ bản mà bạn có thể tham khảo là:
Biến → Kiểu dữ liệu → Toán tử → Câu lệnh điều kiện → Vòng lặp → Hàm → Cấu trúc dữ liệu → Lập trình hướng đối tượng.
Kiểu dữ liệu có thể chỉ là một khái niệm nhỏ khi nhìn riêng lẻ, nhưng hiểu đúng nó sẽ giúp bạn hình thành tư duy quan trọng khi lập trình: biết dữ liệu đang là gì, được tổ chức như thế nào và nên xử lý ra sao.
Tài liệu tham khảo
[1] Python Software Foundation, “Built-in Types – Python 3.14.7 Documentation,” Python Documentation, 2026. https://docs.python.org/3/library/stdtypes.html
[2] Python Software Foundation, “The Python Tutorial – Data Structures,” Python Documentation, 2026. https://docs.python.org/3/tutorial/datastructures.html
[3] Python Software Foundation, “Data Model — Python 3.14.7 Documentation,” Python Documentation, 2026. https://docs.python.org/3/reference/datamodel.html
[4] Python Software Foundation, “Built-in Functions – Python 3.14.7 Documentation,” Python Documentation, 2026. https://docs.python.org/3/library/functions.html
[5] Python Software Foundation, “The Python Language Reference – Python 3.14.7 Documentation,” Python Documentation, 2026. https://docs.python.org/3/reference/index.html
[6] Python Software Foundation, “The Python Standard Library – Python 3.14.7 Documentation,” Python Documentation, 2026. https://docs.python.org/3/library/index.html