Tạo 1 chương trình, với 1 dòng code cơ bản sau để các bạn hiểu:
a=5
Khai báo biến: Python tự động tạo một vùng nhớ cho biến a
để lưu trữ giá trị 5
.
Gán giá trị: Python nhận diện giá trị 5
là một số nguyên (int
) và cấp phát bộ nhớ cho đối tượng số nguyên này.
Đây là cách giải thích gọn.
Stack là bộ nhớ được sử dụng cho các biến cục bộ và tham số hàm. Nó được quản lý tự động, nhanh chóng nhưng có giới hạn về kích thước. Các biến trong stack có thể bị mất khi hàm kết thúc.
Heap là bộ nhớ dành cho các đối tượng và dữ liệu động mà bạn muốn lưu trữ trong suốt vòng đời của chương trình. Nó linh hoạt hơn và có thể sử dụng nhiều bộ nhớ hơn, nhưng quản lý bộ nhớ phức tạp và chậm hơn stack.
(B1) Tạo đối tượng trong bộ nhớ (Heap)
Python coi mọi giá trị như một đối tượng trong bộ nhớ (dù là số nguyên, chuỗi, danh sách, v.v.).
Đối tượng 5
(số nguyên) sẽ được tạo ra trong bộ nhớ heap, không phải trong stack.
Python sẽ lưu trữ giá trị 5
trong heap và gán một con trỏ (reference) trỏ tới đối tượng này.
(B2). Cấp phát bộ nhớ cho biến (Stack)
Biến a
sẽ được tạo ra trong stack (bộ nhớ tạm thời), nhưng không phải chứa giá trị trực tiếp. Thay vào đó, biến a
sẽ là một tham chiếu (reference) trỏ tới đối tượng 5
trong heap.
Stack chỉ lưu trữ tham chiếu (địa chỉ của đối tượng trong heap), giúp tiết kiệm bộ nhớ và cho phép truy xuất đối tượng một cách nhanh chóng.
(B3). Quản lý tham chiếu và bộ đếm (Reference Counting)
Mỗi đối tượng trong Python (bao gồm số nguyên 5
) có một bộ đếm tham chiếu (reference count
), theo dõi số lượng biến hoặc đối tượng tham chiếu đến nó.
Khi bạn gán a = 5
, bộ đếm tham chiếu của đối tượng 5
trong heap sẽ tăng lên 1.
Nếu bạn gán thêm một biến b = a
, thì bộ đếm tham chiếu của đối tượng 5
sẽ tăng lên 2 (do cả a
và b
đều tham chiếu đến đối tượng này).
a = 5
tạo biến a
trong stack, với giá trị 5
được lưu trong heap.5
được lưu trong heap, và stack sẽ lưu trữ tham chiếu tới đối tượng này.
Tìm kiếm:
Lập trình viên hiểu rõ chi tiết về nguyên lý cấp phát bộ nhớ cho biến trong Python giúp lập trình ứng dụng với Python tốt hơn.