Tôi có hàng trăm ma trận thực sự lớn, như (600, 800) hoặc (3, 600, 800) hình dạng.Cài đặt mảng có nhiều mảng thành Không có bộ nhớ trống?
Vì vậy, tôi muốn phân bổ bộ nhớ được sử dụng ngay sau khi tôi không thực sự cần thứ gì đó nữa.
tôi nghĩ:
some_matrix = None
nên thực hiện công việc, hoặc chỉ là tài liệu tham khảo thiết lập để None nhưng đâu đó trong bộ nhớ không gian vẫn được phân bổ? (như bảo quản không gian được cấp cho một số lần khởi tạo lại some_matrix
trong tương lai)
Ngoài ra: đôi khi tôi cắt qua các ma trận, tính toán một cái gì đó và đặt giá trị vào bộ đệm (danh sách, vì nó được nối thêm tất cả thời gian). Vì vậy, việc thiết lập một danh sách thành None sẽ chắc chắn giải phóng bộ nhớ, đúng không?
Hoặc có một số loại phương pháp unset()
tồn tại nơi toàn bộ số nhận dạng cộng với các đối tượng được tham chiếu của nó bị "xóa"?
Cảm ơn bạn đã làm rõ các chức năng/phương pháp. Tôi đã giả định rằng các biến cục bộ được vứt bỏ sau câu lệnh trả về (như trong Java hoặc các ngôn ngữ khác) nhưng thật tuyệt khi biết rằng Python thực sự thực hiện chính xác điều tương tự ở đó. Tuy nhiên, 'del some_array' hoặc thường' del some_variable' phải luôn là lựa chọn đầu tiên cho bộ nhớ giải phóng một cách rõ ràng ?! – daniel451
'' del'' xóa tên biến, vì vậy bất kỳ thao tác nào sau đó bao gồm biến đã xóa sẽ làm tăng lỗi. Mặt khác '' a = None'' giữ biến '' a'' để bạn "có thể" vô tình sử dụng nó sau này và không nhận ra rằng nó thực sự bị "xóa". – MSeifert
Ok, cảm ơn. Tuy nhiên, kịch bản thứ hai sẽ không giải phóng bất cứ thứ gì với 'del' nữa ?! Do đó, 'del' đang xóa số nhận dạng cộng với tham chiếu của nó nhưng đối tượng đằng sau tham chiếu chỉ bị xóa khi không có số nhận dạng nào khác tham chiếu đến nó nữa, đúng không? Vì vậy, miễn là bất kỳ số nhận dạng nào khác tham chiếu đối tượng, như 'b' trong ví dụ của bạn, trình thu gom rác sẽ không xóa đối tượng ?! – daniel451