Các phiên bản Python: Python 2 và 3, có gì mới từ 3.10 đến 3.15 và nên cài bản nào
Nhánh đang phát triển của ngôn ngữ là Python 3, phiên bản ổn định mới nhất là Python 3.15 (phát hành ngày 9 tháng 10 năm 2026); Python 2 không còn được hỗ trợ từ năm 2020. Phiên bản mới ra mỗi tháng 10 và được vá lỗi khoảng năm năm, nên với dự án mới hãy cài bản 3.x mới nhất; kiểm tra phiên bản bằng lệnh python3 --version.
Hiện nay nhánh ngôn ngữ còn sống chỉ có Python 3. Phiên bản ổn định mới nhất là Python 3.15, ra mắt ngày 9 tháng 10 năm 2026, còn Python 2 đã chính thức kết thúc vòng đời từ năm 2020. Dưới đây là sự khác biệt giữa các phiên bản Python, những gì xuất hiện trong từng bản từ 3.10 đến 3.15, nên cài bản nào, và cách kiểm tra phiên bản đang có trên máy bạn.
Cách đánh số phiên bản Python
Số phiên bản gồm ba thành phần: 3.15.0. Số đầu tiên là phiên bản chính (nhánh ngôn ngữ), số thứ hai là phiên bản phụ — trong đó xuất hiện các tính năng mới, số thứ ba là số bản vá, chỉ chứa sửa lỗi. Khi nói về «các phiên bản Python», người ta thường nói đến các bản phụ: 3.10, 3.11, 3.12 và tiếp tục như vậy.
Từ năm 2019 áp dụng chu kỳ hằng năm (PEP 602): mỗi tháng 10 lại có một bản phụ mới. Khoảng nửa năm trước khi phát hành có các bản alpha, sau đó là beta và release candidate, còn sau khi ra mắt là các bản vá như 3.15.1, 3.15.2. Cập nhật giữa các bản vá là an toàn: hành vi của ngôn ngữ trong bản vá không thay đổi.
Từ đó sinh ra sự nhầm lẫn khi tìm kiếm: «python 311» và «python 3.11» là cùng một phiên bản 3.11. Đây không phải số thập phân, nên 3.10 mới hơn 3.9, còn 3.15 mới hơn 3.2.
Python 2 và Python 3: khác nhau ở đâu
Python 3 ra mắt năm 2008 và có chủ đích phá vỡ tương thích ngược để sửa các quyết định cũ của ngôn ngữ. Vì vậy mã viết cho Python 2 thường không chạy trên Python 3 nếu không sửa. Phiên bản cuối của nhánh thứ hai là 2.7, hỗ trợ kết thúc ngày 1 tháng 1 năm 2020, còn bản phát hành cuối cùng 2.7.18 ra mắt vào tháng 4 năm 2020.
| Nội dung | Python 2 | Python 3 |
|---|---|---|
| In ra màn hình | print "hi" — toán tử | print("hi") — hàm |
| Chuỗi | mặc định là byte, Unicode — u"..." | str — luôn là Unicode, byte — bytes |
| Phép chia | 7 / 2 cho 3 | 7 / 2 cho 3.5, chia lấy nguyên — 7 // 2 |
| Nhập liệu | raw_input() | input() |
| Dãy số | range tạo danh sách, xrange — lười | range lười |
| Hỗ trợ | không có từ 2020 | phiên bản mới mỗi năm |
Nếu bạn gặp giáo trình hay lời giải có print viết không có ngoặc, đó là Python 2 — tài liệu đã lỗi thời. Học nhánh thứ hai bây giờ không có ý nghĩa: nó không còn được cài trên các hệ thống mới, thư viện đã ngừng hỗ trợ từ lâu, và kiến thức đó chỉ cần khi chuyển mã cũ sang Python 3.
Có gì mới trong Python 3.10–3.15
Dưới đây là những điểm chính của từng phiên bản — những thứ thay đổi cách viết code hằng ngày. Danh sách thay đổi đầy đủ nằm trong mục What's New của tài liệu chính thức.
Python 3.10 (tháng 10 năm 2021)
- Đối sánh mẫu
match/case(PEP 634) — phân tích cấu trúc dữ liệu thay cho chuỗiif/elif. - Hợp kiểu bằng gạch đứng:
int | Nonethay vìOptional[int](PEP 604). - Nhiều trình quản lý ngữ cảnh trong dấu ngoặc trong một câu
with. - Thông báo lỗi cú pháp dễ hiểu hơn đáng kể.
def describe(point):
match point:
case (0, 0):
return "gốc tọa độ"
case (x, 0):
return f"trên trục X: {x}"
case _:
return "ở một nơi khác"
print(describe((3, 0))) # trên trục X: 3
Python 3.11 (tháng 10 năm 2022)
- Tốc độ: dự án Faster CPython tăng tốc trình thông dịch trung bình khoảng một phần tư, ở một số tác vụ còn nhanh hơn.
- Con trỏ chính xác trong traceback: các mũi tên
^^^^chỉ ra đúng biểu thức nào trên dòng bị lỗi (PEP 657). - Nhóm ngoại lệ và
except*(PEP 654), ghi chú cho ngoại lệ quaadd_note(). - Module
tomllibđể đọc TOML — ví dụpyproject.toml.
Python 3.12 (tháng 10 năm 2023)
- Cú pháp generic mới:
def first[T](items: list[T]) -> Tvà toán tửtypecho bí danh kiểu (PEP 695). - f-string được chuẩn hóa thành ngữ pháp đầy đủ (PEP 701): bên trong có thể dùng cùng loại dấu nháy, xuống dòng và chú thích.
- Đã xóa
distutilslỗi thời khỏi thư viện chuẩn. - Gợi ý chi tiết hơn trong thông báo lỗi, ví dụ «có quên import module không?».
type Pair = tuple[int, int]
def first[T](items: list[T]) -> T:
return items[0]
songs = ["a", "b"]
print(f"Đầu tiên: {first(songs)!r}, tổng {len(songs)}")
print(f"{"dấu nháy bên trong"}") # chạy được từ 3.12
Nhân đây, về câu hỏi hay gặp «f-string từ phiên bản nào»: bản thân f-string đã có từ Python 3.6, còn tự do về dấu nháy và xuống dòng bên trong dấu ngoặc nhọn thì được thêm vào ở 3.12.
Python 3.13 (tháng 10 năm 2024)
- Console tương tác mới: có màu sắc, chỉnh sửa nhiều dòng, lịch sử, và các lệnh
exitvàhelpkhông cần ngoặc. - Bản dựng thử nghiệm không có GIL (free-threaded, PEP 703) và trình biên dịch JIT thử nghiệm (PEP 744).
- Đã xóa các «thư viện chết» — module cũ như
cgivàtelnetlib(PEP 594). - Thời hạn sửa lỗi cho các phiên bản mới được tăng lên hai năm.
Python 3.14 (tháng 10 năm 2025)
- Chuỗi mẫu, t-string:
t"Xin chào, {name}"trả về không phải chuỗi đã hoàn chỉnh mà là đối tượng mẫu, có thể xử lý an toàn (PEP 750). - Trì hoãn tính chú thích kiểu (PEP 649) — ít vấn đề hơn với các kiểu được khai báo phía dưới trong tệp.
- Bản dựng không có GIL không còn thử nghiệm mà được hỗ trợ chính thức.
- Module
compression.zstd, tô sáng cú pháp trong console,except A, B:không cần ngoặc.
Python 3.15 (9 tháng 10 năm 2026)
- Import lười
lazy import(PEP 810): module được nạp khi lần đầu được truy cập, không phải lúc khởi động. Trong phép đo của khóa học, script cólazy import pandaskhởi động trong 14 ms thay vì 280 ms. - Từ điển bất biến tích hợp sẵn
frozendict(PEP 814). - Giải nén trong comprehension danh sách:
[*g for g in groups](PEP 798). - Profiler lấy mẫu Tachyon trong thư viện chuẩn (PEP 799).
- UTF-8 làm mặc định khi làm việc với tệp (PEP 686) — không còn bất ngờ về mã hóa trên Windows.
- Gợi ý «Did you mean» mới trong thông báo lỗi.
lazy import json # PEP 810
cfg = frozendict(limit=500) # PEP 814
flat = [*g for g in [[1, 2], [3]]] # PEP 798 -> [1, 2, 3]
print(flat, cfg["limit"])
# python -m profiling.sampling run app.py # PEP 799, Tachyon
Đoạn code này chỉ chạy trên 3.15: trên các phiên bản cũ hơn, lazy import và giải nén trong comprehension sẽ gây SyntaxError, còn frozendict — NameError.
Thời hạn hỗ trợ các phiên bản Python
Mỗi phiên bản sống khoảng năm năm. Đầu tiên nó nhận các bản sửa lỗi thông thường và bản vá định kỳ (từ 3.13 là hai năm), sau đó chỉ nhận bản vá bảo mật đến hết thời hạn. Sau đó phiên bản được coi là end-of-life: không ai vá lỗ hổng trong đó nữa.
| Phiên bản | Phát hành | Hết hỗ trợ | Trạng thái tháng 10 năm 2026 |
|---|---|---|---|
| 2.7 | 2010 | tháng 1 năm 2020 | không được hỗ trợ |
| 3.9 | tháng 10 năm 2020 | tháng 10 năm 2025 | không được hỗ trợ |
| 3.10 | tháng 10 năm 2021 | tháng 10 năm 2026 | sắp kết thúc hỗ trợ |
| 3.11 | tháng 10 năm 2022 | tháng 10 năm 2027 | chỉ bảo mật |
| 3.12 | tháng 10 năm 2023 | tháng 10 năm 2028 | chỉ bảo mật |
| 3.13 | tháng 10 năm 2024 | tháng 10 năm 2029 | sửa lỗi |
| 3.14 | tháng 10 năm 2025 | tháng 10 năm 2030 | sửa lỗi |
| 3.15 | tháng 10 năm 2026 | tháng 10 năm 2031 | mới nhất |
Trạng thái hiện tại của từng nhánh được công bố trên trang Status of Python versions trong Python Developer's Guide. Trước khi chọn phiên bản cho một dự án lâu dài, hãy kiểm tra trang đó.
Nên cài phiên bản Python nào
Với học tập và dự án mới — hãy cài bản ổn định mới nhất, hiện nay là Python 3.15. Lý do «tôi sẽ lấy bản 3.10 đã kiểm chứng» không hợp lý: đến tháng 10 năm 2026 nó ngừng nhận cả bản vá bảo mật, và học ngôn ngữ theo một phiên bản đang rút lui nghĩa là sau này bạn sẽ phải học lại. Trong nhánh Python 3 khả năng tương thích khá tốt: mã viết cho phiên bản cũ hầu như luôn chạy trên bản mới, nhưng chiều ngược lại thì không đúng.
Cũng có ngoại lệ. Nếu thư viện bạn cần chưa phát hành bản wheel cho phiên bản mới (điều này xảy ra trong vài tuần đầu sau bản phát hành tháng 10 với các gói có phần mở rộng viết bằng C), hãy dùng bản trước đó — 3.14. Trên server có vòng đời dài, hãy căn cứ vào phiên bản trong kho của bản phân phối Linux hoặc cài phiên bản cần thiết qua trình quản lý uv. Quy tắc chính là không chọn phiên bản mà thời gian hỗ trợ còn lại dưới một năm.
| Tình huống | Nên cài |
|---|---|
| Học ngôn ngữ từ đầu | bản ổn định mới nhất (3.15) |
| Dự án mới | bản mới nhất hoặc gần mới nhất |
| Thư viện chưa hỗ trợ bản mới | bản phụ trước đó |
| Dự án cũ trên 3.10 trở xuống | lên kế hoạch chuyển sang phiên bản còn được hỗ trợ |
| Mã Python 2 | chuyển sang Python 3 |
Cách kiểm tra phiên bản Python
Trong terminal chỉ cần một lệnh. Trên macOS và Linux thường dùng python3, trên Windows — python hoặc trình khởi chạy py.
$ python3 --version
Python 3.12.3 # phiên bản cũ — nên nâng cấp
$ python3 -V
Python 3.15.0
Trên Windows, trình khởi chạy liệt kê tất cả các phiên bản đã cài, còn uv liệt kê các phiên bản nó thấy và có thể cài:
py --list
uv python list
Từ bên trong chương trình, phiên bản được lấy qua module sys. Bộ sys.version_info rất tiện để so sánh, giúp script tự kiểm tra xem trình thông dịch có phù hợp không:
import sys
print(sys.version) # chuỗi đầy đủ kèm ngày build
print(sys.version_info[:3]) # ví dụ (3, 15, 0)
if sys.version_info < (3, 10):
raise SystemExit("Cần Python 3.10 trở lên")
Nếu python3 --version hiển thị không phải phiên bản bạn đã cài, nghĩa là trong PATH có trình thông dịch khác được tìm thấy trước. Để biết chính xác là trình nào, hãy dùng which python3 trên macOS và Linux, hoặc where python trên Windows.
Nhiều phiên bản Python trên cùng một máy
Việc có 3.13 và 3.15 cùng lúc là bình thường: mỗi bản được cài vào thư mục riêng. Tiện nhất là quản lý chúng qua uv: uv python install 3.15 tải phiên bản về, còn uv python pin 3.15 ghim nó cho dự án trong tệp .python-version. Python hệ thống trên Linux tốt nhất đừng động vào và đừng cập nhật thủ công — các tiện ích của chính hệ điều hành đang chạy trên nó.
Phiên bản tối thiểu của dự án được khai báo trong pyproject.toml, trong trường requires-python. Khi đó trình quản lý gói sẽ không cho cài dự án lên trình thông dịch không phù hợp.
[project]
name = "expenses"
version = "0.1.0"
requires-python = ">=3.15"
Kết luận
Các phiên bản Python hiện hành thuộc nhánh 3, trong đó mới nhất là 3.15 với lazy import, frozendict và UTF-8 mặc định. Python 2 đã kết thúc từ năm 2020, 3.10 sắp rời khỏi hỗ trợ vào tháng 10 năm 2026, vì vậy hãy học và bắt đầu dự án trên phiên bản mới. Kiểm tra phiên bản của bạn bằng python3 --version. Trong khóa học, mỗi chủ đề đều kết thúc bằng khối «Có gì mới trong 3.10–3.15», nên những thay đổi giữa các phiên bản được thực hành cụ thể.
Câu hỏi thường gặp
IDLE Python 3.10 64-bit trong menu Start là gì?
Đây là môi trường phát triển đơn giản đi kèm trình cài đặt từ python.org; trong tên có ghi phiên bản trình thông dịch và kiến trúc bit. Nếu hiển thị 3.10, bạn đang dùng phiên bản sắp hết hỗ trợ — nên cài bản mới.
Có thể nâng cấp Python 3.12 lên 3.15 bằng cách cài đè không?
Các phiên bản phụ được cài song song chứ không cài đè: sau khi cài 3.15, bản cũ vẫn còn và bạn có thể gỡ riêng. Thư viện cần cài lại cho phiên bản mới hoặc tạo lại môi trường ảo.
Khác nhau giữa bản 64-bit và 32-bit là gì?
Bản 64-bit có thể dùng nhiều bộ nhớ hơn và phù hợp với mọi máy tính hiện đại; bản 32-bit chỉ nên dùng cho hệ thống rất cũ.
Bản alpha và beta để làm gì?
Đây là các bản dựng thử nghiệm của phiên bản tiếp theo, dùng để kiểm thử thư viện và dự án; cho học tập và công việc chỉ nên dùng bản phát hành chính thức.
Chủ đề này được giảng chi tiết kèm thực hành trong khóa học “Python 3.15: от новичка до профи”.
Đến khóa học