मैं पाइथन स्क्रिप्ट है कि कुछ कार्यों के लिए कई कॉल कर चल रहा हूँ, कहते हैं कि एफ 1 (x) और एफ 2 (x), कि इस जैसे दिखते हैं:पायथन में स्थिर स्मृति: क्या लूप स्मृति में चर के नए उदाहरण बनाते हैं?
x = LoadData()
for j in range(N):
y = F1(x[j])
z[j] = F2(y)
del y
SaveData(z)
प्रदर्शन बहुत तेजी से अगर मैं रखना है "डेल वाई" लाइन। लेकिन मुझे समझ में नहीं आता कि यह सच क्यों है। अगर मैं "डेल वाई" का उपयोग नहीं करता, तो मैं जल्दी से राम से बाहर चला जाता हूं और वर्चुअल मेमोरी का सहारा लेना चाहता हूं, और सब कुछ क्रॉल में धीमा हो जाता है। अगर मैं "डेल वाई" का उपयोग करता हूं तो खरीदें, फिर मैं बार-बार फ्लशिंग कर रहा हूं और वाई के लिए स्मृति आवंटित कर रहा हूं। मैं क्या करना चाहता हूं कि y स्थिर स्थिर स्मृति के रूप में बैठे हैं, और प्रत्येक F1 (x) कॉल पर स्मृति का पुन: उपयोग करें। लेकिन मैं जो कह सकता हूं उससे, यह नहीं हो रहा है कि क्या हो रहा है।
इसके अलावा, यह सुनिश्चित नहीं है कि यह प्रासंगिक है, लेकिन मेरे डेटा में numpy arrays शामिल हैं।
यह प्रश्न शायद मानता है कि वाई को पहली बार लूप के अंदर घोषित किया गया है, मुझे इसका उल्लेख करना चाहिए था। हालांकि सवाल के इस पहलू पर टिप्पणी करने के लिए स्वतंत्र महसूस करें! –
यदि आपको स्पष्ट 'डेल वाई' पसंद नहीं है तो लूप बॉडी को फ़ंक्शन में निकालें। इस तरह लूप के अंदर पूरी तरह से स्कॉप्ड किए गए किसी भी चर को प्रत्येक पुनरावृत्ति के लिए स्वचालित रूप से साफ़ किया जाएगा। – Duncan