Nguyên lý cấp phát bộ nhớ cho biến trong Python

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.

  1. Một số định nghĩa
  2. Hai loại bộ nhớ Stack, Heap trong hệ thống máy tính
  3. Quy trình cấp phát bộ nhớ

1. Một số định nghĩa

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.

Khai báo biến nghĩa là tạo một hộp để chứa thứ gì đó.
Mỗi hộp có tên riêng để bạn biết mình bỏ gì vào.
Chỉ khai báo thôi thì hộp vẫn trống, chưa có gì bên trong.

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. 

Gán giá trị nghĩa là đặt thứ gì đó vào trong hộp.

age = 10
name = "Hoang"

age = 10 → bỏ số 10 vào hộp tên age.
name = "Hoang" → bỏ chữ “Hoang” vào hộp tên name.

Giống như bạn có hộp tên age, bạn đặt vào đó quả táo màu 10 hoặc tên “Hoang”.

2. Hai loại bộ nhớ Stack, Heap trong hệ thống máy tính

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.

Về Stack và Heap

Stack luôn lưu biến và tham chiếu (hoặc các tham số hàm).

Heap lưu giá trị thực sự của các đối tượng (số, chuỗi, list, dict…).

Nguyên lý cấp phát bộ nhớ cho biến trong Python

3. Quy trình cấp phát bộ nhớ

a=10
print("a=",a)
b=a
print("b=",b)
a=20
print("a=",a)

* Nhiệm vụ cấp phát

Cấp phát bộ nhớ cho biến (Stack)

Stack: a    b 

Tạo đối tượng trong bộ nhớ (Heap)

Heap:     10          20

* Thứ tự cấp phát

1️⃣ Bước 1: a = 10

Python tạo một giá trị 10 trong Heap (bộ nhớ động).
Biến a trên Stack lưu tham chiếu đến giá trị 10 trong Heap.

Stack:   a → [tham chiếu đến 10]
Heap:    10

2️⃣ Bước 2: b = a

Biến b trên Stack được tạo.
b lấy tham chiếu của a, tức cùng trỏ tới giá trị 10 trong Heap.

Stack:   a → [10]
         b → [10]
Heap:    10

3️⃣ Bước 3: a = 20

Python tạo giá trị 20 mới trong Heap.
a trên Stack được cập nhật trỏ tới 20.
b vẫn trỏ tới 10 trong Heap (không thay đổi).

Stack:   a → [20]
         b → [10]
Heap:    10, 20

Stack: lưu biến và tham chiếu.
Heap: lưu giá trị thực sự.

Khi gán b = a, chỉ copy tham chiếu, không copy giá trị.
Khi đổi a = 20, Python tạo giá trị mới trong Heap và cập nhật a trên Stack, b vẫn giữ giá trị cũ.

 

Tìm kiếm:

Bài viết liên quan:

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.