2009-06-24 26 views

Trả lời

18

Có và không. Các đối tượng sẽ bị phá hủy sau khi bạn rời khỏi foo (miễn là không có gì khác có một tham chiếu đến nó), nhưng cho dù đó là ngay lập tức hay không là một chi tiết thực hiện, và sẽ thay đổi.

Trong CPython (triển khai python chuẩn), việc đếm ngược được sử dụng, vì vậy mục đó sẽ bị hủy ngay lập tức. Có một số ngoại lệ cho điều này, chẳng hạn như khi đối tượng chứa tham chiếu chu kỳ, hoặc khi tham chiếu được giữ cho khung kèm theo (ví dụ: ngoại lệ được nêu ra giữ lại tham chiếu đến biến của khung.)

Trong implmentations như Jython hoặc IronPython tuy nhiên, đối tượng sẽ không được hoàn thành cho đến khi bộ thu gom rác bắt đầu.

Vì vậy, bạn không nên dựa vào việc hoàn thành các đối tượng kịp thời, nhưng chỉ giả định rằng nó sẽ bị hủy tại một số điểm sau tham chiếu cuối cùng đi. Khi bạn cần một số dọn dẹp được thực hiện dựa trên phạm vi từ vựng, hoặc gọi một cách rõ ràng phương pháp dọn dẹp, hoặc xem with statement mới trong python 2.6 (có sẵn trong 2,5 với "from __future__ import with_statement").

+2

+1: Biến, 'a' nằm trong không gian tên bị xóa ngay lập tức. Đây là những gì làm giảm số lượng tham chiếu. Biến tồn tại trong một cấu trúc giống như ngăn xếp. Đối tượng cơ bản không. –

Các vấn đề liên quan