Các biến và bộ nhớ được quản lý như thế nào trong Python.
Tự động! Không, thực sự, bạn chỉ cần tạo một đối tượng và Máy ảo Python xử lý bộ nhớ cần thiết và nơi nó sẽ được đặt trong bố cục bộ nhớ.
Nó có một ngăn xếp và một đống không và thuật toán nào được sử dụng để quản lý bộ nhớ?
Khi chúng ta đang nói về CPython
nó, nó sử dụng một heap riêng để lưu trữ các đối tượng. Từ tài liệu API CPython C :
Quản lý bộ nhớ trong Python liên quan đến một heap riêng chứa tất cả các đối tượng và cấu trúc dữ liệu Python. Việc quản lý đống riêng tư này được đảm bảo nội bộ bởi trình quản lý bộ nhớ Python. Trình quản lý bộ nhớ Python có các thành phần khác nhau giải quyết các khía cạnh quản lý lưu trữ động khác nhau, như chia sẻ, phân đoạn, định vị trước hoặc bộ nhớ đệm.
Việc cải tạo bộ nhớ chủ yếu được xử lý bằng cách đếm tham chiếu . Nghĩa là, máy ảo Python giữ một nhật ký nội bộ về số lượng tham chiếu tham chiếu đến một đối tượng và tự động thu thập nó khi không còn tham chiếu nào đề cập đến nó. Ngoài ra, có một cơ chế để phá vỡ các tham chiếu vòng (mà việc đếm tham chiếu không thể xử lý) bằng cách phát hiện các "đảo" không thể truy cập của các đối tượng, phần nào ngược lại với các thuật toán GC truyền thống cố gắng tìm tất cả các đối tượng có thể truy cập.
LƯU Ý: Hãy nhớ rằng thông tin này làCPython
cụ thể. Triển khai khác python, chẳng hạn nhưpypy
,iron python
,jython
và những người khác có thể khác nhau và từ CPython khi nói đến chi tiết cụ thể thực hiện. Để hiểu điều đó tốt hơn, có thể giúp bạn hiểu rằng có sự khác biệt giữa ngữ nghĩa (ngôn ngữ) của Python và cách triển khai cơ bản
Với kiến thức này, có bất kỳ khuyến nghị nào về quản lý bộ nhớ cho việc xử lý dữ liệu / số lượng lớn không?
Bây giờ tôi không thể nói về điều này, nhưng tôi chắc chắn rằng NumPy (thư viện python phổ biến nhất để bẻ khóa số) có các cơ chế xử lý việc tiêu thụ bộ nhớ một cách duyên dáng.
Nếu bạn muốn biết thêm về Nội bộ của Python, hãy xem các tài nguyên sau: