Hướng dẫn memory management in python pdf - quản lý bộ nhớ trong pdf python

Quản lý bộ nhớ là quá trình lưu trữ bộ nhớ một cách linh hoạt và giải phóng nó khi không sử dụng.

Hiểu quản lý bộ nhớ trong Python

Trong Python, sự phân bổ và giải quyết bộ nhớ này được thực hiện tự động bởi bộ thu gom rác Python được tạo bởi các nhà phát triển Python để người dùng không phải thực hiện bộ sưu tập rác thủ công.

Thu gom rác thải

Bộ sưu tập rác trong Python là quá trình quản lý bộ nhớ để giải phóng bộ nhớ không sử dụng và không mong muốn cho các chương trình của chúng tôi bởi thông dịch viên. Trong Python, điều này được thực hiện tự động.

Trình thu gom rác tìm thấy đối tượng không có tham chiếu chỉ vào nó và sau đó xóa đối tượng đó khỏi bộ nhớ heap. Đối với điều này, Python sử dụng thuật toán đếm tham chiếu.

Example:

class Python:

    def __init__[self]:
        print['The object is created.']

    def __del__[self]:
        print['The object is destroyed.']

obj1 = Python[]
obj2 = obj1
obj3 = obj1
print["Set obj1 to None"]
obj1 = None
print["Set obj2 to None"]
obj2 = None
print["Set obj3 to None"]
obj3 = None

Output:

The object is created.
Set obj1 to None
Set obj2 to None
Set obj3 to None
The object is destroyed.

Ở đây, chúng tôi đã tạo ra một đối tượng của Python lớp và chuyển tài liệu tham khảo của nó cho OBJ1, OBJ2, OBJ3. Điều này làm cho số lượng tham chiếu của đối tượng đó 3. Sau đó, khi chúng ta gán các tài liệu tham khảo này cho không có, tất cả các tài liệu tham khảo từ đối tượng đó được xóa và trở thành 0. Vì không có tài liệu tham khảo nào về đối tượng, nó bị phá hủy bởi Trình thu thập rác Python và __del__ [] Phương thức được thực thi.

Đếm tham chiếu

Đếm tham chiếu trong Python là một kỹ thuật trong đó một đối tượng được giải quyết từ bộ nhớ khi không có tài liệu tham khảo chỉ vào nó. Khi số lượng tham chiếu trở thành 0, đối tượng sẽ bị xóa.

Chúng tôi có một hàm sẵn có getRefCount [] có trong SYS mô -đun Python trả về số lượng tham chiếu cho đối tượng Python đã cho. getrefcount[]present in python module sys which returns the number of references for the given python object.

Example:

import sys
str = "Welcome to Python"
print[sys.getrefcount[str]]

arr = []
arr.append[str] # appending to an array
print[sys.getrefcount[str]]

dict = {}
dict['str'] = str # adding to a dictionary
print[sys.getrefcount[str]]

arr = [] # resetting the array
sys.getrefcount[str]
dict['my_str'] = "Some other string"
print[sys.getrefcount[str]]
 

Output:

Giá trị của số lượng tham chiếu cao hơn so với những gì bạn mong đợi bởi vì nó cũng tính số lượng tham chiếu cho đối tượng được truyền trong hàm sys.getrefcount [].

Đôi khi số lượng tham chiếu của một đối tượng không bao giờ đạt đến 0. Điều này xảy ra bởi vì đối tượng đề cập đến chính nó. Đây được gọi là một chu kỳ tham chiếu.Reference cycle.

Example:

import sys
x = []
x.append[x] # x contains reference to itself
print["Reference count of object is",sys.getrefcount[x]]

Output:

Reference count of object is 3

Ở đây, một đối tượng X được tạo ra trong đó đề cập đến chính nó. Số lượng tham chiếu sẽ không bao giờ đạt 0 vì nó có tài liệu tham khảo riêng. Đối tượng X sẽ chiếm bộ nhớ cho đến khi người thu gom rác Python được gọi.

Khi đối tượng được khai báo trên toàn cầu, số lượng tham chiếu của một đối tượng không bao giờ có thể trở thành không.

Cấp phát bộ nhớ

Để hiểu phân bổ bộ nhớ, chúng ta phải hiểu bộ nhớ truy cập ngẫu nhiên [RAM]. RAM cũng được gọi là bộ nhớ chính cho phép lưu trữ và truy xuất thông tin trên máy tính.

Ở đầu ram, chúng tôi có một ngăn xếp và ở phía dưới, chúng tôi có đống. Heap chịu trách nhiệm lưu trữ các biến/giá trị và ngăn xếp chịu trách nhiệm giữ các tham chiếu đến đối tượng trong đống.

Vị trí xếp chồng và đống trong RAM

Trong Python, khi có nhiều hơn một biến có cùng giá trị, một biến thứ hai trỏ đến giá trị ban đầu được tạo trong đống.

Example:

x = 5
y = x 
if[id[x] == id[y]]:
   print["x and y refer to the same object"]

x = x+1
if[id[x] != id[y]]:
    print["x and y refer to different objects"]

z = 5
if[id[y] == id[y]]:
   print["y and z refer to same memory"]

Output:

x and y refer to the same object
x and y refer to different objects
y and z refer to same memory

Có hai loại phân bổ bộ nhớ:

  • Ngăn xếp phân bổ bộ nhớ
  • Phân bổ bộ nhớ nặng.

1. Phân bổ bộ nhớ ngăn xếp

Phân bổ bộ nhớ ngăn xếp là bộ nhớ của bộ nhớ tĩnh bên trong một lệnh gọi phương thức hoặc hàm cụ thể. Khi hàm được gọi, bộ nhớ được lưu trữ trong ngăn xếp gọi hàm. Bất kỳ khởi tạo biến cục bộ nào được lưu trữ trong ngăn xếp cuộc gọi và bị xóa sau khi hàm trả về.

Vì vậy, khi chúng tôi chạy chương trình của mình, tất cả các chức năng được lưu trữ trước tiên trong ngăn xếp cuộc gọi và sau đó bị xóa khi hàm được trả về.

Example:

def func[]:
    #These initializations are stored in stack memory
    x = 10 
    y = "Apple"
     

2. Phân bổ bộ nhớ heap

Phân bổ bộ nhớ heap là bộ nhớ của bộ nhớ cần thiết bên ngoài một hàm cụ thể hoặc cuộc gọi phương thức. Bộ nhớ này được sử dụng trong chương trình ở phạm vi toàn cầu.

Bộ nhớ heap không liên quan đến cấu trúc dữ liệu heap. Nó chỉ đơn giản là một không gian lớn của bộ nhớ được cung cấp cho người dùng khi họ muốn phân bổ và giải quyết các biến/giá trị.

Trong Python, bộ nhớ heap được quản lý bởi chính trình thông dịch và người dùng không có quyền kiểm soát đối với nó.

Example:

def func[]
    #Allocates memory for 5 integers in heap memory
    x=[None]*5

Sự kết luận

Các lập trình viên đã yêu Python vì khả năng quản lý bộ nhớ vượt trội. So với nhiều ngôn ngữ lập trình cấp thấp khác, Python khiến nó trở nên dễ dàng khi làm việc với các biến mà không phải lo lắng về việc lạm dụng tài nguyên.

Người giới thiệu

Tài liệu chính thức

Quản lý bộ nhớ trong Python là gì?

Quản lý bộ nhớ trong Python liên quan đến một đố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ý đống riêng tư này được đảm bảo trong nội bộ bởi Trình quản lý bộ nhớ Python.involves a private heap containing all Python objects and data structures. The management of this private heap is ensured internally by the Python memory manager.

Bộ nhớ được quản lý như thế nào trong các câu hỏi phỏng vấn Python?

Bộ nhớ Python chủ yếu được quản lý bởi không gian heap riêng của Python.Tất cả các đối tượng Python và cấu trúc dữ liệu được đặt trong một đống riêng tư.Lập trình viên không có quyền truy cập vào đống riêng tư và thông dịch viên này chăm sóc cho đống riêng Python này.primarily managed by Python private heap space. All Python objects and data structures are located in a private heap. The programmer does not have access to this private heap and interpreter takes care of this Python private heap.

Làm thế nào bộ nhớ được quản lý trong danh sách Python?

Như chúng ta đã biết, Python sử dụng phân bổ bộ nhớ động được quản lý bởi cấu trúc dữ liệu HEAP.Bộ nhớ chứa các đối tượng và các cấu trúc dữ liệu khác sẽ được sử dụng trong chương trình.Trình quản lý bộ nhớ Python quản lý việc phân bổ hoặc phân bổ không gian bộ nhớ heap thông qua các hàm API.Python uses the dynamic memory allocation which is managed by the Heap data structure. Memory Heap holds the objects and other data structures that will be used in the program. Python memory manager manages the allocation or de-allocation of the heap memory space through the API functions.

Quản lý bộ nhớ có quan trọng trong Python không?

Hiểu phân bổ 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ã tiết kiệm bộ nhớ.Phân bổ bộ nhớ có thể được định nghĩa là phân bổ một khối không gian trong bộ nhớ máy tính cho một chương trình. as writing efficient code means writing a memory-efficient code. Memory allocation can be defined as allocating a block of space in the computer memory to a program.

Bài Viết Liên Quan

Chủ Đề