... và mỗi vòng lặp giống như một danh sách hiểu.Tôi thấy mình đang vung búa đọc danh sách
Thay vì:
for stuff in all_stuff:
do(stuff)
tôi đang làm (không gán danh sách để bất cứ điều gì):
[ do(stuff) for stuff in all_stuff ]
Đây là một mô hình phổ biến được tìm thấy trên list-comp how-to's. 1) OK, vậy không có vấn đề gì lớn phải không? Sai rồi. 2) Đây không phải là kiểu mã? Siêu sai.
1) Yea đã sai. Như NiklasB chỉ ra, của HowTos là xây dựng một danh sách mới.
2) Có thể, nhưng không rõ ràng và rõ ràng, vì vậy tốt hơn không nên sử dụng.
Tôi không nhớ rằng những cách thực hiện đó chủ yếu dựa trên dòng lệnh. Sau khi nhóm của tôi hét lên với tôi tự hỏi tại sao địa ngục tôi đã xây dựng danh sách lớn và sau đó để cho họ đi, nó xảy ra với tôi rằng tôi có thể giới thiệu một lỗi liên quan đến bộ nhớ lớn.
Vì vậy, đây là câu hỏi của tôi. Nếu tôi đã làm điều này trong một quá trình chạy rất dài, nơi mà rất nhiều dữ liệu đã được tiêu thụ, liệu danh sách "này" có tiếp tục tiêu thụ trí nhớ của tôi cho đến khi đi không? Khi nào thì bộ thu gom rác sẽ lấy lại bộ nhớ? Sau khi phạm vi danh sách này được xây dựng trong bị mất?
Tôi đoán là có, nó sẽ tiếp tục tiêu thụ trí nhớ của tôi. Tôi không biết làm thế nào các bộ thu gom rác python hoạt động, nhưng tôi sẽ liên doanh để nói rằng danh sách này sẽ tồn tại cho đến sau khi next
cuối cùng được gọi là trên all_stuff
.
EDIT.
Bản chất của câu hỏi của tôi được chuyển tiếp sạch hơn nhiều in this question (nhờ các liên kết Niklas)
Bạn có thể làm một số 'chuẩn timeit' cho mã cuối cùng của bạn khối? – Blender
@Blender: Meh, dường như không thể chứng minh điều này ... Cảm ơn bạn đã buộc tôi phải học nó một cách khó khăn: P –
Có một câu hỏi một thời gian trước đây về điều đó: [Chuyển các trình vòng lặp đến bất kỳ để thực hiện Tốc độ và Tại sao?] (http://stackoverflow.com/q/9144934/1132524) –