दिलचस्प पोस्ट
क्या एपीआई द्वारा गैलेक्सी नेक्सस को नियंत्रित करने के लिए एलईडी टॉर्च? स्पार्क एसक्यूएल: उपयोगकर्ता परिभाषित फ़ंक्शन में शून्य मानों से कैसे निपटें? यूनिट्स के लिए लिनक्स बनाम ग्रुपजॉइन में शामिल हों Crossdomain.xml फ़ाइल क्या है? ट्यूपल तत्व के प्रकार का सूचकांक प्राप्त करें? के बीच क्या अंतर है ? और जावा जेनेरिक में ऑब्जेक्ट? एंड्रॉइड: फ़ोकस एक संपादन टेक्स्ट पर है, तो स्वचालित रूप से नरम कीबोर्ड दिखाएं जावा पास-बाय-संदर्भ कभी नहीं, है ना? … ठीक है? प्रतिबिंब का उपयोग करते हुए मैं एक सामान्य प्रकार की सही पाठ परिभाषा कैसे प्राप्त करूं? एनएससीके का उपयोग कैसे करें IOS में NSAttributedString में HTML को कनवर्ट करें कैसे लिनक्स थ्रेड्स और प्रक्रिया शेड्यूलिंग को संभालता है क्या यह स्पष्ट रूप से बूलियन स्थिरांक से तुलना करना बुरा है जैसे जावा में (बी == गलत)? गिट को बाइनरी फाइलों को मर्ज करने के लिए नहीं बल्कि चुनने के लिए कहें H: बटन और h के बीच का अंतर: कमांड बटन

पायथन में मूल्यों को पास करना

जब आप संग्रह की तरह एक संग्रह पास करते हैं, अजगर में किसी अन्य फ़ंक्शन को सरणी करते हैं, तो क्या इसकी एक प्रतिलिपि बनाते हैं, या यह सिर्फ एक संकेतक है?

Solutions Collecting From Web of "पायथन में मूल्यों को पास करना"

पायथन मूल्य के संदर्भ-के-ऑब्जेक्ट से गुजरता है ।

पायथन संदर्भ से वस्तुओं को मान (जैसे जावा) से गुजरता है, और पायथन में सब कुछ एक वस्तु है। यह सरल लगता है, लेकिन फिर आप देखेंगे कि कुछ डेटा प्रकार पास-बाय-वैल्यू विशेषताओं का प्रदर्शन करते हैं, जबकि दूसरों को पास-बाय-रेफरेंस जैसे कार्य लगता है … सौदा क्या है?

अस्थिर और अपरिवर्तनीय वस्तुओं को समझना महत्वपूर्ण है। कुछ वस्तुएं, जैसे स्ट्रिंग, ट्यूपल्स और संख्याएं, अपरिवर्तनीय हैं। फ़ंक्शन / पद्धति के अंदर उन्हें बदलने से एक नया उदाहरण पैदा होगा और फ़ंक्शन / विधि के बाहर मूल आवृत्ति नहीं बदली जाएगी। अन्य वस्तुएं, जैसे सूचियाँ और शब्दकोश, अस्थिर हैं, जिसका मतलब है कि आप ऑब्जेक्ट को इन-प्लेस में बदल सकते हैं। इसलिए, फ़ंक्शन / विधि के अंदर किसी ऑब्जेक्ट को बदलना मूल वस्तु को बाहर भी बदल देगा।

बात यह है, पूरे संदर्भ / मूल्य अवधारणा अजगर में फिट नहीं होगा पायथन में कोई चर का "मान" नहीं है पायथन में केवल ऑब्जेक्ट और नाम होते हैं जो ऑब्जेक्ट्स का संदर्भ देते हैं।

इसलिए जब आप फ़ंक्शन कॉल करते हैं और कोष्ठक के अंदर "नाम" डालते हैं, तो इस तरह:

def func(x): # defines a function that takes an argument ... # do something here func(myname) # calling the function 

वास्तविक वस्तु जो मेरा नाम इंगित करती है पारित हो जाती है, मेरा नाम ही नहीं है फ़ंक्शन के अंदर एक और वस्तु ( x ) को दिया गया है जो उस ऑब्जेक्ट को संदर्भित किया गया है।

आप फंक्शन के भीतर ऑब्जेक्ट को संशोधित कर सकते हैं यदि यह अस्थिर है, लेकिन आप बाहरी नाम की ओर इशारा करते हुए इसे बदल नहीं सकते हैं । बस ऐसा ही होता है जब आप करते हैं

 anothername = myname 

इसलिए मैं आपके प्रश्न का उत्तर इस पर दे सकता हूं:

यह "पास से मूल्य" है, लेकिन सभी मान केवल वस्तुओं के संदर्भ हैं

यहां दिए गए उत्तर सहायक होते हैं, लेकिन मुझे इस शानदार भेद को प्रदर्शित करने की आवश्यकता है, जिसे मैंने कवर नहीं किया है, जिसे मैंने सीएल प्रयोग के साथ खुद को सिद्ध किया है:

  1. किसी अस्थायी वस्तु को एक फ़ंक्शन कॉल के भीतर बदला जा सकता है। (उत्तर अभी तक कहा है कि बहुत …)
  2. परन्तु, एक अस्थायी वस्तु के भीतर एक अपरिवर्तनीय वस्तु शामिल है जिसे विधि कॉल के भीतर फिर से असाइन किया जा सकता है।

'num' यहाँ नहीं बदलता क्योंकि यह एक अपरिवर्तनीय नंबर ऑब्जेक्ट है [मेरे बिंदु 1 का समर्थन करता है]:

 def incr_num(num): num += 1 num = 0 num 0 incr_num(num) num 0 

'सूची [0]' यहां एक अपरिवर्तनीय नंबर ऑब्जेक्ट भी है।

 def incr_list(list): list[0] += 1 list = [0] list[0] 0 incr_list(list) list[0] 1 

तो 'सूची [0]', कैसे एक अचल संख्या वस्तु है, परिवर्तन (मेरी बात 2 का समर्थन करता है), जबकि उपरोक्त उदाहरण के नंबर ऑब्जेक्ट 'num' नहीं किया? अपरिवर्तनीय संख्या वस्तु 'सूची [0]' में अस्थिर सूची ऑब्जेक्ट 'सूची' के भीतर समाहित है, जबकि पहले उदाहरण से 'num' सिर्फ एक गैर-contianed संख्या ऑब्जेक्ट है।

यद्यपि अच्छी तरह से इरादा है, मुझे @ स्टीफन पेप के शीर्ष-रेट किए गए उत्तर (नीचे दिए गए उद्धरण) लगता है, और कुछ अन्य इसी तरह, बिल्कुल सही नहीं थे (और इससे मुझे यह जवाब लिखने के लिए प्रेरित किया गया था):

कुछ वस्तुएं, जैसे स्ट्रिंग, ट्यूपल्स और संख्याएं, अपरिवर्तनीय हैं। फ़ंक्शन / पद्धति के अंदर उन्हें बदलने से एक नया उदाहरण पैदा होगा और फ़ंक्शन / विधि के बाहर मूल आवृत्ति नहीं बदली जाएगी।

मेरा दूसरा कोड प्रयोग ऊपर एक संख्या वस्तु दिखाता है ('सूची [0]') एक विधि के भीतर बदल रहा है, और फिर फ़ंक्शन के बाहर मूल आवृत्ति बदल गया।

एक संदर्भ पारित किया गया है, लेकिन यदि पैरामीटर एक अपरिवर्तनीय वस्तु है, तो इसे विधि के भीतर संशोधित करने के लिए एक नया उदाहरण बनाएगा

इस विषय पर एक धागा है

वस्तु पारित हो गई है एक प्रति नहीं, लेकिन अंतर्निहित ऑब्जेक्ट का एक संदर्भ

मैं copy मॉड्यूल को देखने copy सिफारिश भी करता हूं:

प्रतिलिपि के लिए पायथन दस्तावेज़ीकरण

यह आपको अंतर्निहित मुद्दों को समझने में और आपकी अपनी गहरी प्रतिलिपि बनाने के लिए इसका उपयोग करने में सहायता करेगा।

संदर्भ से:

 >>> x = [0,1,2,3] >>> def foo(x_list): x_list[0] = 1 >>> foo(x) >>> x [1, 1, 2, 3] 

कृपया मुझे एक नम्र उदाहरण दें

 def swap(a, b): x = a print id(x) print id(a) print id(b) a = b print id(a) b = x print id(b) a[0]= '20' var1 = ['1','2','3','4'] var2 = ['5','6','7','8','9'] print id(var1) print id(var2) swap(var1, var2) print id(var1) print id(var2) print var1 print var2 

जो निम्न परिणाम उत्पन्न करता है

28329344 var1 28331264 var2 28329344 एक्स 28329344 एक 28331264 बी के बाद ए = बी 28331264 ए के बाद बी = एक्स 28329344 बी वापसी के बाद 28329344 var1 28331264 var2 ['1', '2', '3', '4'] ['20' '6', '7', '8', '9']

[0] = '20' [0] = '20' रिटर्न के बाद ['1', '2', '3', 'बी' के बाद बी = xb के बाद मेमोरी पते 28329344 28331264 var1 var2 ab x के बाद। '4'] ['20', '6', '7', '8', '9']