Đóng file trong python

nói chung là nó được in ra màn hình nhưng sau khi in xong thì bị xóa đi đúng ko ạ? Sau khi in ra màn hình mình nhìn thấy nó(nhưng đã bị xóa đi)

Không, biến chỉ mất đi khi chương trình kết thúc hoặc ra ngoài Scope, có vẻ bạn vẫn chưa nghiên cứu kĩ ví dụ mình đưa cho, thứ bạn đang thiếu chính là không hiểu vòng đời của biến

1 Like

em không nói biến , em nói con số hay một đoạn chuối!

Thế là bạn chưa hiểu rồi, tất cả đối tượng trong mọi nnlt đều quy về biến, Hằng số và các chỉ thị, thứ ma nãy giờ bạn đang thắc mắc chính là vòng đời của biến đấy

1 Like

Vậy nếu như vd trên thì sau khi in xong nó vẫn chưa mất và mất đi khi kết thúc chương trình ( cá con số với chuỗi)?

như vậy khi gán a = 1 b = 2 khi gán a = b thì lúc này a tham chiếu đến 2 cái mà b đang tham chiếu , và 1 sẽ không còn tham chiếu GC --> xóa!
Còn biến a và b vẫn còn mất đi sau khi kết thúc chương trình!

Thường đối với những giá trị như số, chuỗi có giá trị là hằng số sẽ có 1 thứ gọi là object pool quản lý để tránh việc tạo đi tạo lại đối tượng giống nhau gây tốn bộ nhớ, do vậy hai số trong ví dụ của bạn sẽ không bị gc thu hồi đâu, nhưng cái chuỗi mà bạn read từ file thì không may mắn như vậy đâu

2 Likes

Vậy khi mình print số hay phép toán ,chuỗi gì đó thì nó không cần tham chiếu bởi vì sẽ không bị GC đúng không ạ? vậy write file cũng vậy ạ? Write mà không có tham chiếu gì vd: Txt = open(file_name) Txt.write(“gi do”) thì cái write đó mình không cần tham chiếu đúng không ạ? write nó không bị GC?
Như vd trên thì vùng lưu trữ giá trị 1 vẫn còn đúng không ạ?

Mình chưa hiểu lắm câu bạn hỏi là gì, thứ nhất bạn cần làm rõ cho mình cái gì là 1 biến, làm gì là biểu thức, biểu thức thì không có tham chiếu nó chỉ là chỉ thị ra lệnh cho mt làm việc, biến thì có, ở đây write chính là method cũng là 1 chỉ thị thực hiện hay là 1 hành động, cái gì write, ở đây là txt, write cái gì ở đây là “gì đó”.

1 Like

Em vẫn chưa phân biệt khi nào sẽ bị GC ạ?

Khi mà print một số chẳng hạn hay là một chuỗi gì, một phép toán nào đó thì nó sẽ không bị GC đúng không ạ?

a = 1+2-3*7
b = "Mot doan chuoi"
thì a sẽ tham chiếu tới phép toán trên lúc này a có giá trị như phép toán và b cũng vậy
gán một cái gì vào biến thì biến đó sẽ tham chiếu tới cái đó chứ không lưu trực tiếp( lưu gián tiếp?)

trong vd a=1 và b=2 thì 1 sẽ không được tham chiếu vậy cái vùng đó sẽ ra sao?

Và biểu thức không có tham chiếu là sao ạ?

trả lời nhiều đến mức forum báo động luôn rồi :laughing:
sợ bạn ko hiểu được đối tượng nên mình đã nói rõ là vùng nhớ luôn cho nó cụ thể, 1 biến lưu tham chiếu đến 1 vùng nhớ, tức là địa chỉ của vùng nhớ đó, và vùng nhớ đó lưu 1 já trị (có thể là string, number, list, dict, …) chứ không lưu 1 biểu thức (mún lưu biểu thức bạn phải định nghĩa hàm)
jống như mẹ bạn kêu tính tiền tiêu hôm nay bao nhiu rồi ghi vào sổ, thì bạn sẽ bấm tính ra kết qủa rồi ghi vào sổ, chứ không ghi hết các biểu thức tính toán vào sổ
thì biểu thức sẽ tính ra kết qủa rồi lưu vào biến, chứ ko lưu biểu thức vào biến
đây là 1 quy tắc abc trong lập trình mà ai cũng biết, ko chừa ngôn ngữ nào ra hết, có lẽ bạn ms học python là ngôn ngữ đầu tiên

ở đây a tham chiếu đến -18

1 Like

Em mới học nên còn rối lắm, làm sao để phân biệt cái nào là GC ạ?

tinh thần học hỏi của bạn rất nhiệt tình, nhưng mình xét thấy bạn chưa học đủ để hỏi.
vậy topic này close ở đây được rồi, mình khuyên nên tìm đọc Head First Python và Learning Python, đọc cho nghiền nát mới thôi, mặc dù số trang của nó không dễ nhai, bởi vì đọc ở đây là để học lập trình chứ không phải học python

1 Like

Tại cái lúc học file nó lòi ra thêm GC nữa nên làm em rối, trả lời em cái cuối với ạ? Làm sao để phân biệt được cái nào GC ạ?

Trả lời giúp em câu cuối thôi a ơi! Làm sao để phân biết GC ạ?

Anh ơi , Làm sao để phân biệt GC ạ??, Giúp em câu cuối thôi, một câu cuối thôi ạ! Trả lời giúp em với ạ!!!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?