Hướng dẫn toàn diện về biến và kiểu dữ liệu trong Python cho người mới bắt đầu
Kiến thức lập trình

Hướng dẫn toàn diện về biến và kiểu dữ liệu trong Python cho người mới bắt đầu

TX
Trần Xuân Hiếu
Xuất bản 6/29/2026

Mọi chương trình Python, dù đơn giản hay phức tạp, đều có một điểm chung: chúng cần lưu trữ và xử lý dữ liệu. Điểm số của học sinh, tên sản phẩm trong giỏ hàng, trạng thái đăng nhập của người dùng, tất cả đều là dữ liệu và đều cần được chương trình ghi nhớ trong quá trình chạy. 

Biến chính là công cụ đầu tiên Python cung cấp để làm điều đó. Hiểu rõ biến và kiểu dữ liệu không chỉ giúp bạn viết code đúng mà còn giúp bạn tránh được một loạt lỗi phổ biến mà người mới học thường gặp phải. Bài viết này sẽ đi qua toàn bộ những khái niệm bạn cần nắm, từ cách khai báo biến cơ bản cho đến cách Python xử lý kiểu dữ liệu linh hoạt theo cách riêng của nó.

Biến trong Python là gì?

Biến (variable) là một vùng không gian trong bộ nhớ được đặt tên để lưu trữ một giá trị. Khi bạn tạo một biến và gán cho nó một giá trị, Python sẽ cấp phát một ô nhớ phù hợp và gắn tên biến đó vào ô nhớ đó. Mỗi khi bạn gọi tên biến trong chương trình, Python sẽ truy xuất đúng giá trị đang được lưu ở đó.

Điểm khác biệt lớn nhất của Python so với các ngôn ngữ như Java hay C++ là bạn không cần khai báo kiểu dữ liệu trước khi sử dụng biến. Python tự động nhận diện kiểu dựa trên giá trị bạn gán vào, cơ chế này được gọi là dynamic typing. Điều đó có nghĩa là thay vì phải viết int age = 25 như trong Java, bạn chỉ cần viết age = 25 và Python tự hiểu đây là số nguyên.

Cách khai báo và gán giá trị cho biến

Cú pháp khai báo biến trong Python rất đơn giản: chỉ cần tên biến, dấu bằng và giá trị muốn gán.

name = "Alice"
age = 25
height = 1.65
is_student = True

Python cũng cho phép gán nhiều biến trên cùng một dòng, hoặc gán cùng một giá trị cho nhiều biến cùng lúc:

# Gán nhiều biến cùng lúc
x, y, z = 1, 2, 3

# Gán một giá trị cho nhiều biến
a = b = c = 0

Một điểm cần lưu ý là mỗi lần bạn gán giá trị mới cho một biến, giá trị cũ sẽ bị thay thế hoàn toàn. Python không giữ lại lịch sử các giá trị trước đó của biến.

Quy tắc đặt tên biến trong Python

Đặt tên biến đúng chuẩn giúp code dễ đọc và tránh lỗi cú pháp. Dưới đây là các quy tắc bạn cần nắm:

Được phép:

  • Tên biến có thể chứa chữ cái (a-z, A-Z), chữ số (0-9) và dấu gạch dưới (_)
  • Tên biến có thể bắt đầu bằng chữ cái hoặc dấu gạch dưới
  • Python phân biệt chữ hoa và chữ thường, name và Name là hai biến hoàn toàn khác nhau

Không được phép:

  • Tên biến không được bắt đầu bằng chữ số (1name là không hợp lệ)
  • Tên biến không được chứa ký tự đặc biệt như @!-, khoảng trắng
  • Tên biến không được trùng với từ khóa dành riêng của Python như ifforwhileTrueFalse

Convention phổ biến:

  • Dùng snake_case cho tên biến thông thường: user_nametotal_priceis_logged_in
  • Dùng chữ hoa toàn bộ cho hằng số: MAX_SIZEPI
  • Tên biến nên có ý nghĩa rõ ràng, tránh dùng tên mơ hồ như xatemp trừ khi trong các phép tính toán học ngắn

Kiểu dữ liệu trong Python

Kiểu dữ liệu xác định loại giá trị mà một biến có thể lưu trữ và những thao tác có thể thực hiện trên giá trị đó. Python có hệ thống kiểu dữ liệu phong phú, được chia thành hai nhóm chính là kiểu dữ liệu cơ bản (primitive) dành cho các giá trị đơn lẻ và kiểu dữ liệu tập hợp (collection) dành cho các cấu trúc lưu nhiều giá trị.

Kiểu dữ liệu cơ bản

int (Số nguyên)

Kiểu int dùng để lưu các số nguyên, không có phần thập phân, có thể là số dương, số âm hoặc số không. Python không giới hạn độ lớn của số nguyên, bạn có thể làm việc với số nguyên có hàng triệu chữ số nếu cần.

age = 25
temperature = -10
population = 8000000000

print(type(age))  # <class 'int'>

Hàm type() giúp bạn kiểm tra kiểu dữ liệu của một biến bất kỳ, rất hữu ích khi debug.

float (Số thực)

Kiểu float dùng để lưu các số có phần thập phân. Python sử dụng chuẩn IEEE 754 double precision để biểu diễn số thực, do đó có một số trường hợp kết quả tính toán có thể xuất hiện sai số nhỏ ở phần thập phân.

height = 1.75
pi = 3.14159
negative_float = -2.5

print(type(height))  # <class 'float'>

# Lưu ý về sai số floating point
print(0.1 + 0.2)  # 0.30000000000000004 (không phải 0.3)

Khi cần độ chính xác cao trong tính toán tài chính, bạn nên dùng module decimal thay vì float.

str (Chuỗi ký tự)

Kiểu str dùng để lưu văn bản, có thể là một ký tự, một từ, một câu hoặc toàn bộ đoạn văn bản dài. Chuỗi trong Python có thể được khai báo bằng nháy đơn, nháy kép hoặc nháy ba (dùng cho chuỗi nhiều dòng).

first_name = 'Alice'
last_name = "Nguyen"
bio = """Đây là một đoạn mô tả nhiều dòng."""

# Một số thao tác cơ bản với chuỗi
print(len(first_name))         # 5 - độ dài chuỗi
print(first_name.upper())      # ALICE - chuyển thành chữ hoa
print(first_name + last_name)  # AliceNguyen - nối chuỗi
print(f"Xin chào, {first_name}!")  # Xin chào, Alice! - f-string

bool (Boolean)

Kiểu bool chỉ có hai giá trị là True và False, lưu ý phải viết hoa chữ cái đầu. Boolean thường được dùng trong các câu lệnh điều kiện để kiểm soát luồng chương trình.

is_logged_in = True
has_permission = False

print(type(is_logged_in))  # <class 'bool'>

# Boolean trong điều kiện
if is_logged_in:
    print("Chào mừng bạn trở lại!")

Ngoài True và False, Python còn quy định một số giá trị được xem là "falsy" khi dùng trong điều kiện như 0"" (chuỗi rỗng), None[] (danh sách rỗng).

complex (Số phức)

Kiểu complex dùng để biểu diễn số phức với phần thực và phần ảo. Đây là kiểu dữ liệu ít gặp trong lập trình web thông thường nhưng rất hữu ích trong tính toán khoa học, xử lý tín hiệu và các bài toán toán học nâng cao.

z = 3 + 4j
print(z.real)  # 3.0 - phần thực
print(z.imag)  # 4.0 - phần ảo
print(type(z)) # <class 'complex'>

Kiểu dữ liệu tập hợp

list (Danh sách)

list là kiểu dữ liệu dùng để lưu nhiều giá trị trong một biến duy nhất, các phần tử được sắp xếp theo thứ tự và có thể thay đổi sau khi tạo. List được khai báo bằng cặp ngoặc vuông [].

fruits = ["apple", "banana", "cherry"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", True, 3.14]  # List có thể chứa nhiều kiểu dữ liệu

print(fruits[0])       # apple - truy cập phần tử theo index
fruits.append("mango") # Thêm phần tử vào cuối
fruits[1] = "grape"    # Thay đổi giá trị phần tử
print(len(fruits))     # Độ dài của list

tuple

tuple tương tự như list nhưng có một điểm khác biệt quan trọng: sau khi tạo, bạn không thể thay đổi các phần tử bên trong. Tuple được khai báo bằng cặp ngoặc tròn () và thường dùng cho các tập dữ liệu cố định không nên thay đổi trong suốt chương trình.

coordinates = (10.5, 106.7)
rgb_color = (255, 128, 0)

print(coordinates[0])  # 10.5
# coordinates[0] = 11  # Lỗi! tuple không thể thay đổi

Vì không thể thay đổi, tuple nhanh hơn list về mặt hiệu suất và an toàn hơn khi bạn muốn đảm bảo dữ liệu không bị vô tình sửa đổi.

dict (Dictionary)

dict lưu dữ liệu theo cặp key-value, mỗi key là duy nhất và được dùng để tra cứu giá trị tương ứng. Đây là kiểu dữ liệu cực kỳ phổ biến trong Python, đặc biệt khi làm việc với JSON hoặc dữ liệu có cấu trúc.

user = {
    "name": "Alice",
    "age": 25,
    "is_active": True
}

print(user["name"])     # Alice
user["email"] = "alice@example.com"  # Thêm key mới
print(user.keys())      # Lấy tất cả keys
print(user.values())    # Lấy tất cả values

set (Tập hợp)

set là tập hợp các phần tử không có thứ tự và không cho phép trùng lặp. Set đặc biệt hữu ích khi bạn cần loại bỏ giá trị trùng trong một danh sách hoặc kiểm tra sự tồn tại của một phần tử nhanh chóng.

unique_numbers = {1, 2, 3, 2, 1}
print(unique_numbers)  # {1, 2, 3} - tự động loại bỏ trùng lặp

# Dùng set để loại bỏ trùng lặp từ list
numbers = [1, 2, 2, 3, 3, 4]
unique = set(numbers)
print(unique)  # {1, 2, 3, 4}

Dynamic Typing trong Python

Python là ngôn ngữ dynamic typing, có nghĩa là kiểu dữ liệu của một biến được xác định tại thời điểm chạy chương trình chứ không phải lúc viết code. Hệ quả thực tế của điều này là bạn có thể gán lại biến với một kiểu dữ liệu hoàn toàn khác mà Python không báo lỗi.

x = 10
print(type(x))  # <class 'int'>

x = "hello"
print(type(x))  # <class 'str'>

x = [1, 2, 3]
print(type(x))  # <class 'list'>

Điều này mang lại sự linh hoạt đáng kể, đặc biệt khi viết code nhanh hoặc thử nghiệm. Tuy nhiên, dynamic typing cũng tiềm ẩn rủi ro: nếu không kiểm soát tốt, biến có thể vô tình bị gán sai kiểu và gây lỗi ở những nơi khác trong chương trình mà rất khó truy vết.

Hàm type() và isinstance() là hai công cụ hữu ích để kiểm tra kiểu dữ liệu khi cần:

value = 42
print(type(value))              # <class 'int'>
print(isinstance(value, int))   # True
print(isinstance(value, str))   # False

Ép kiểu dữ liệu (Type Casting)

Trong nhiều tình huống thực tế, bạn sẽ cần chuyển đổi dữ liệu từ kiểu này sang kiểu khác. Ví dụ điển hình là khi người dùng nhập dữ liệu qua bàn phím, Python luôn nhận về kiểu str, nhưng nếu người dùng nhập một con số thì bạn cần chuyển nó thành int hoặc float trước khi thực hiện phép tính. Python cung cấp hai cơ chế ép kiểu để xử lý điều này.

Implicit casting (ép kiểu ngầm định) xảy ra khi Python tự động chuyển đổi kiểu dữ liệu mà không cần bạn yêu cầu. Điều này thường xảy ra khi bạn thực hiện phép toán giữa int và float:

result = 5 + 2.0
print(result)       # 7.0
print(type(result)) # <class 'float'>
# Python tự chuyển 5 thành 5.0 trước khi cộng

Explicit casting (ép kiểu tường minh) là khi bạn chủ động dùng hàm chuyển đổi để thay đổi kiểu dữ liệu. Các hàm thường dùng bao gồm:

# int() - chuyển về số nguyên
print(int("42"))     # 42
print(int(3.9))      # 3 (cắt bỏ phần thập phân, không làm tròn)
print(int(True))     # 1

# float() - chuyển về số thực
print(float("3.14")) # 3.14
print(float(5))      # 5.0

# str() - chuyển về chuỗi
print(str(100))      # "100"
print(str(3.14))     # "3.14"
print(str(True))     # "True"

# bool() - chuyển về boolean
print(bool(0))       # False
print(bool(1))       # True
print(bool(""))      # False
print(bool("hello")) # True

Cần lưu ý rằng không phải mọi chuỗi đều có thể chuyển thành số. Nếu chuỗi không phải biểu diễn hợp lệ của một con số, Python sẽ báo lỗi ValueError:

python

int("hello")  # ValueError: invalid literal for int() with base 10: 'hello'
int("3.14")   # ValueError: không thể chuyển chuỗi "3.14" thành int trực tiếp
              # Phải dùng float("3.14") trước, sau đó mới int()

Những lỗi phổ biến khi làm việc với biến và kiểu dữ liệu trong Python

Hiểu kiểu dữ liệu không chỉ là biết định nghĩa mà còn là biết những lỗi hay gặp để tránh. Dưới đây là ba lỗi phổ biến nhất mà người mới học Python thường gặp phải.

TypeError khi thao tác giữa hai kiểu không tương thích

age = 25
message = "Tuổi của bạn là: " + age
# TypeError: can only concatenate str (not "int") to str

# Cách sửa: ép kiểu trước khi nối chuỗi
message = "Tuổi của bạn là: " + str(age)
# Hoặc dùng f-string
message = f"Tuổi của bạn là: {age}"

NameError khi sử dụng biến chưa được khai báo

print(username)
# NameError: name 'username' is not defined

# Cần khai báo biến trước khi sử dụng
username = "Alice"
print(username)

ValueError khi ép kiểu không hợp lệ

user_input = "abc"
number = int(user_input)
# ValueError: invalid literal for int() with base 10: 'abc'

# Cách xử lý an toàn bằng try-except
try:
    number = int(user_input)
except ValueError:
    print("Giá trị nhập vào không hợp lệ, vui lòng nhập số.")

Trở thành lập trình viên Full stack web Python cùng Onschool Bootcamp

Nắm vững lý thuyết là bước đầu tiên, nhưng để thực sự thành thạo Python, bạn cần được thực hành trên các bài toán thực tế, nhận phản hồi trực tiếp trên từng đoạn code và làm việc trong môi trường mô phỏng quy trình của một developer thực thụ. Đó chính xác là những gì chương trình đào tạo tại Onschool Bootcamp được xây dựng để làm.

Với lộ trình 120 ngày theo mô hình Learning by Doing, học viên không chỉ học Python qua lý thuyết mà còn ứng dụng trực tiếp vào các dự án thực tế tăng dần độ phức tạp, từ xử lý dữ liệu cơ bản cho đến xây dựng các tính năng backend hoàn chỉnh. Toàn bộ quá trình học diễn ra trong môi trường Lab Online từ 8h đến 23h mỗi ngày, với mentor đồng hành và hỗ trợ 1-1 xuyên suốt, đảm bảo không có học viên nào bị bỏ lại phía sau dù học theo tốc độ nào.

Sau khi hoàn thành chương trình, bạn sẽ có trong tay một portfolio với hơn 10 dự án thực tế, CV được tối ưu và sự chuẩn bị kỹ càng cho các buổi phỏng vấn kỹ thuật, cùng với sự kết nối đến mạng lưới doanh nghiệp đối tác của Onschool Bootcamp.

Kết luận

Biến và kiểu dữ liệu là nền tảng mà mọi kiến thức Python tiếp theo đều được xây dựng trên đó. Hiểu rõ cách Python quản lý dữ liệu, sự khác biệt giữa từng kiểu, cách ép kiểu đúng cách và những lỗi thường gặp sẽ giúp bạn tiết kiệm rất nhiều thời gian debug về sau. Bước tiếp theo sau khi nắm vững phần này là tìm hiểu về các câu lệnh điều kiện và vòng lặp trong Python, nơi mà các kiểu dữ liệu này sẽ được đưa vào sử dụng thực tế một cách rõ ràng hơn.

Bạn đã sẵn sàng đổi thay sự nghiệp chưa?

Onschool Bootcamp tự hào chỉ trong 120 ngày, đào tạo thế hệ lập trình viên kiến tạo thế giới số - bắt đầu từ con số 0

Đừng quên chia sẻ bài viết này!

Sao chép link

Cùng Onschool Bootcamp chinh phục lộ trình 120 ngày đổi thay sự nghiệp

Fullstack java web developer
Fullstack javascript (Nodejs & reactjs web developer
Fullstack Python web developer
Fullstack PHP web developer
Cross-Platform Mobile App Development

Khóa học dành cho người từ 18 tuổi trở lên

zalomessenger