bạn đã học kĩ về biến trong python chưa, ở đây biến luôn là tham chiếu đến 1 vùng nhớ (kể cả những gía trị đơn jản nhất như 1 hay ‘a’, thì biến cũng không lưu trực tiếp mà chỉ tham chiếu đến vùng nhớ đó)
vậy một vùng nhớ dc khởi tạo nhưng không có (hoặc không còn) biến nào tham chiếu đến nó sẽ là gc và bị xóa ngay sau khi nó là gc vài jây ( là khi python runtime phát hiện ra nó là gc, vì python runtime chắc chắn vùng nhớ đó sẽ không dc sử dụng nữa)
chứ ko phải sau khi kết thúc chương trình
f = open('filename') # gọi hàm open, hàm open khởi tạo và trả về vùng nhớ chứa buffer, f lưu tham chiếu đến vùng nhớ đó (tạm gọi là mem1)
# python runtime check: mem1 dc tham chiếu bởi biến f, còn sử dụng, không xóa
s = f.read() # gọi method f.read(), trả về vùng nhớ chứa string (là nội dung file), s lưu tham chiếu đến vùng nhớ đó (tạm gọi là mem2)
# python runtime check: mem1 tham chiếu bởi f, còn sử dụng, ko xóa, mem2 cũng vậy
f.close() # save file và làm gì đó khiến mem1 nhỏ lại không đáng kể (ko xóa mem1, ko rõ python làm v làm j)
# python runtime chekc: mem1(lúc này không đáng kể) vẫn dc tham chiếu bởi f, mem2 vẫn dc tham chiếu bởi s , không xóa
del f # xóa biến f
# mem1 ko còn dc tham chiếu nữa (f bị xóa rồi), xóa, mem2 vẫn được tham chiếu bởi s, ko xóa
riêng ghi tắt
s = open('filename').read() # gọi hàm open, gọi method read() lên *gía trị trả về của hàm open* (mem1), lưu *gía trị trả về của read()* (mem2) vào s
# check : mem1 không có biến nào tham chiếu -> gc, bị xóa (và close lun, vì khi define hàm open ngta đã thiết lập như thế) , mem2 có s tham chiếu, ko xóa
P/S: từ đầu tới h sao ko có lấy 1 like vậy hả 