2012-04-24 14 views
5

मैं जो कह सकता हूं उससे, PyList_SetItem और PyList_SETITEM के बीच का अंतर यह है कि PyList_SetItem उस सूची आइटम की संदर्भ संख्या को कम करेगा जो इसे ओवरराइट करता है और PyList_SETITEM नहीं करता है।PyList_SetItem बनाम PyList_SETITEM

क्या कोई कारण है कि मुझे हर समय PyList_SetItem का उपयोग क्यों नहीं करना चाहिए? या अगर मैं किसी सूची में इंडेक्स स्थिति आरंभ करने के लिए PyList_SetItem का उपयोग करता हूं तो क्या मुझे परेशानी होगी?

उत्तर

6

PyList_SET_ITEM एक असुरक्षित मैक्रो है जो मूल रूप से किसी ऑब्जेक्ट को किसी भी बाध्य चेक के बिना सूची के आंतरिक सूचक सरणी में चिपकता है। यदि कुछ भी गैर-NULL सूची की i वें स्थिति में है, तो एक संदर्भ रिसाव होगा। PyList_SET_ITEM आपके द्वारा सूची में डाली गई वस्तु का संदर्भ चुराता है। PyList_SetItem भी संदर्भ चुराता है, लेकिन यह i वें स्थान पर हो सकता है जो कुछ भी सीमाओं और घटता है। नियम-का-अंगूठे PyList_SET_ITEM का उपयोग उन सूचियों को आरंभ करने के लिए किया गया है जिन्हें आपने अभी बनाया है और PyList_SetItem अन्यथा। यह हर जगह PyList_SetItem का उपयोग करने के लिए भी पूरी तरह से सुरक्षित है; PyList_SET_ITEM मूल रूप से एक गति हैक है।

+1

लेकिन अगर मैं PyList_SetItem * सभी * समय का उपयोग करता हूं और * कभी नहीं * PyList_SETITEM का उपयोग करता हूं तो मुझे किसी भी प्रकार की परेशानी होगी? – user1245262

+2

बिलकुल नहीं। वास्तव में, यह शायद सबसे सुरक्षित तरीका है। 'PyList_SET_ITEM' ज्यादातर एक गति हैक है। –

+0

धन्यवाद - और आपके मूल उत्तर को अंतिम पंक्ति स्पष्ट करने के लिए धन्यवाद। – user1245262