Python lưu trữ dữ liệu trong bộ nhớ như thế nào?

Cấp phát bộ nhớ là quá trình cấp phát bộ nhớ cho một chương trình máy tính. Trong Python, quá trình cấp phát và giải phóng bộ nhớ được xử lý tự động vì có một trình thu gom rác được tạo trong python để người dùng không phải xử lý quá trình thu gom rác

Thu gom rác thải

Đó là một quá trình trong đó bộ nhớ được giải phóng khi nó không được sử dụng để cung cấp không gian cho các đối tượng khác. Trong trường hợp không có ai tham chiếu đến đối tượng trong bộ nhớ thì trong máy ảo, trình thu gom rác sẽ hoạt động để tự động xóa đối tượng trong bộ nhớ heap

Đếm tham khảo

Đó là một thủ tục hoạt động bằng cách đếm số lần một đối tượng được tham chiếu bởi các đối tượng khác trong máy tính. Số lượng này cho một đối tượng bị giảm khi tham chiếu đến một đối tượng bị xóa. Và khi số này trở thành 0, thì đối tượng đó bị hủy bỏ
Ví dụ, trong trường hợp hai biến có cùng giá trị. Sau đó, máy ảo thay vì tạo hai đối tượng khác nhau, nó sẽ tạo hai con trỏ trỏ vào cùng một đối tượng được tạo trong vùng riêng tư

Thí dụ

b = 3
a = 6

b = 6
print[id[a] == id[b]]

đầu ra. Thật

Cấp phát bộ nhớ trong Python

Có hai phần của bộ nhớ

  • ngăn xếp bộ nhớ
  • bộ nhớ đống

Các lệnh gọi hàm và các tham chiếu được lưu trữ trong bộ nhớ ngăn xếp trong khi tất cả các đối tượng giá trị được lưu trữ trong bộ nhớ heap

Công việc của bộ nhớ ngăn xếp

Nó được gọi là cấp phát bộ nhớ ngăn xếp vì việc cấp phát xảy ra trong ngăn xếp lệnh gọi hàm. Tại thời điểm cấp phát, kích thước bộ nhớ được trình biên dịch biết và khi có lệnh gọi hàm xảy ra, thì biến của nó sẽ được cấp phát bộ nhớ trên ngăn xếp
Đó là bộ nhớ cần thiết bên trong một chức năng cụ thể. Khi hàm được gọi, nó sẽ được thêm vào ngăn xếp của lời gọi chương trình. Khởi tạo biến bên trong hàm được lưu trữ tạm thời trong ngăn xếp lệnh gọi hàm, nơi nó sẽ bị xóa sau khi hoàn thành hàm. Việc phân bổ bộ nhớ này vào bộ nhớ liền kề được xử lý bởi trình biên dịch, các nhà phát triển không phải lo lắng về điều đó

Thí dụ

def func[]:
      
    a = 10
    b = ""
    c = {}

Công việc của bộ nhớ Heap

Cấp phát bộ nhớ heap được thực hiện khi bộ nhớ được cấp phát tại thời điểm thực hiện chương trình do lập trình viên viết. Vì có một đống không gian bộ nhớ có sẵn trong quá trình cấp phát và hủy cấp phát, đó là lý do tại sao nó được gọi là bộ nhớ heap. Biến được yêu cầu trên toàn cầu trong chương trình được lưu trữ trong bộ nhớ heap

Thí dụ

# This memory for 5 integers is allocated in the heap.
arr = [0] * 5

Bài viết này đã cố gắng thảo luận Làm thế nào các biến được lưu trữ trong python – Stack hoặc Heap?. Hy vọng blog này giúp bạn hiểu khái niệm. Để thực hành nhiều vấn đề hơn, vui lòng kiểm tra MYCODE. Lập trình cạnh tranh tại Prepbytes

Hiểu về cấp phát bộ nhớ rất quan trọng đối với bất kỳ nhà phát triển phần mềm nào vì viết mã hiệu quả có nghĩa là viết mã hiệu quả về bộ nhớ. Cấp phát bộ nhớ có thể được định nghĩa là cấp phát một khối không gian trong bộ nhớ máy tính cho một chương trình. Trong Python, phương thức cấp phát và giải phóng bộ nhớ là tự động vì các nhà phát triển Python đã tạo bộ thu gom rác cho Python để người dùng không phải thực hiện thu gom rác thủ công

Thu gom rác thải

Thu gom rác là một quá trình trong đó trình thông dịch giải phóng bộ nhớ khi không sử dụng để cung cấp bộ nhớ cho các đối tượng khác
Giả sử trường hợp không có tham chiếu nào trỏ đến một đối tượng trong bộ nhớ i. e. vì vậy nó không được sử dụng, máy ảo có bộ thu gom rác tự động xóa đối tượng đó khỏi bộ nhớ heap

Ghi chú. Để biết thêm thông tin, hãy tham khảo Bộ sưu tập rác trong Python

Đếm tham khảo

Đếm tham chiếu hoạt động bằng cách đếm số lần một đối tượng được tham chiếu bởi các đối tượng khác trong hệ thống. Khi các tham chiếu đến một đối tượng bị xóa, số lượng tham chiếu cho một đối tượng sẽ giảm đi. Khi số lượng tham chiếu trở thành 0, đối tượng được hủy bỏ

Ví dụ: Giả sử có hai hoặc nhiều biến có cùng giá trị, vì vậy, máy ảo Python làm gì, thay vì tạo một đối tượng khác có cùng giá trị trong vùng riêng tư, nó thực sự làm cho biến thứ hai trỏ đến điểm ban đầu . Do đó, trong trường hợp của các lớp, việc có một số tham chiếu có thể chiếm một lượng lớn không gian trong bộ nhớ, trong trường hợp như vậy, việc đếm tham chiếu rất có lợi để duy trì bộ nhớ khả dụng cho các đối tượng khác

Thí dụ




x= 10

Khi x = 10 được thực thi, một đối tượng số nguyên 10 được tạo trong bộ nhớ và tham chiếu của nó được gán cho biến x, điều này là do mọi thứ đều là đối tượng trong Python

Hãy xác minh xem đó có phải là sự thật không




x= 10

y= x

x and y do not refer to the same object
2

x and y do not refer to the same object
3
x and y do not refer to the same object
4
x and y do not refer to the same object
5==
x and y do not refer to the same object
4
x and y do not refer to the same object
9

x0x1x2x3x4

đầu ra

x and y refer to the same object

Trong ví dụ trên, x5 sẽ tạo một biến tham chiếu khác y sẽ tham chiếu đến cùng một đối tượng vì Python tối ưu hóa việc sử dụng bộ nhớ bằng cách phân bổ cùng một tham chiếu đối tượng cho một biến mới nếu đối tượng đã tồn tại với cùng một giá trị

Bây giờ, hãy thay đổi giá trị của x và xem điều gì sẽ xảy ra




x= 10

y= x

x=3_______17_______ =5

x and y do not refer to the same object
2

x and y do not refer to the same object
3
x and y do not refer to the same object
4=9=
x and y do not refer to the same object
4
x and y do not refer to the same object
9

x0x1x2106x4

đầu ra

x and y do not refer to the same object

Vì vậy, bây giờ x đề cập đến một đối tượng mới x và liên kết giữa x và 10 bị ngắt kết nối nhưng y vẫn đề cập đến 10

Phân bổ bộ nhớ trong Python

Có hai phần của bộ nhớ

  • ngăn xếp bộ nhớ
  • bộ nhớ đống

Các phương thức/cuộc gọi phương thức và các tham chiếu được lưu trữ trong bộ nhớ ngăn xếp và tất cả các đối tượng giá trị được lưu trữ trong một đống riêng

Công việc của bộ nhớ ngăn xếp

Việc phân bổ xảy ra trên các khối bộ nhớ liền kề. Chúng tôi gọi đó là cấp phát bộ nhớ ngăn xếp vì việc cấp phát xảy ra trong ngăn xếp lệnh gọi hàm. Kích thước của bộ nhớ được phân bổ được trình biên dịch biết và bất cứ khi nào một hàm được gọi, các biến của nó sẽ nhận được bộ nhớ được phân bổ trên ngăn xếp

Đó là bộ nhớ chỉ cần thiết bên trong một lệnh gọi hàm hoặc phương thức cụ thể. Khi một chức năng được gọi, nó sẽ được thêm vào ngăn xếp cuộc gọi của chương trình. Bất kỳ phép gán bộ nhớ cục bộ nào, chẳng hạn như khởi tạo biến bên trong các chức năng cụ thể, được lưu trữ tạm thời trên ngăn lệnh gọi hàm, nơi nó sẽ bị xóa sau khi hàm trả về và ngăn xếp lệnh gọi chuyển sang tác vụ tiếp theo. Việc phân bổ này vào một khối bộ nhớ liền kề được trình biên dịch xử lý bằng cách sử dụng các thường trình được xác định trước và các nhà phát triển không cần phải lo lắng về điều đó

Thí dụ




108 109

x = 100

x0x = 102

x0x = 104

x0x = 106= x = 108

x0x0= x2

x0x4= x6

Công việc của bộ nhớ Heap

Bộ nhớ được phân bổ trong quá trình thực hiện các hướng dẫn được viết bởi các lập trình viên. Lưu ý rằng tên heap không liên quan gì đến cấu trúc dữ liệu heap. Nó được gọi là heap vì nó là một đống không gian bộ nhớ có sẵn cho các lập trình viên để cấp phát và hủy cấp phát. Các biến cần thiết bên ngoài các cuộc gọi phương thức hoặc chức năng hoặc được chia sẻ trong nhiều chức năng trên toàn cầu được lưu trữ trong bộ nhớ Heap

Bộ nhớ được duy trì như thế nào trong Python?

Quản lý bộ nhớ trong Python bao gồm một vùng riêng tư chứa tất cả các đối tượng Python và cấu trúc dữ liệu. Việc quản lý vùng riêng tư này được đảm bảo nội bộ bởi trình quản lý bộ nhớ Python .

Các đối tượng Python được lưu trữ trong bộ nhớ ở đâu?

Cấp phát bộ nhớ trong Python . heap memory.

Python phân bổ bộ nhớ cho các biến như thế nào?

Python tối ưu hóa việc sử dụng bộ nhớ bằng cách phân bổ cùng một tham chiếu đối tượng cho một biến mới nếu đối tượng đã tồn tại với cùng một giá trị . Đó là lý do tại sao python được gọi là bộ nhớ hiệu quả hơn.

Chủ Đề