की बजाय उस फ़ंक्शन में वैश्विक की तरह काम करता है, मैं नीचे दिए गए व्यवहार से बहुत उलझन में हूं। मामले 1, 3, और 4 प्रदर्शन करते हैं जैसा कि मैं उम्मीद करता हूं, लेकिन मामला 2 नहीं है। क्यों मामला 2 वैश्विक स्तर पर शब्दकोश प्रविष्टि के मूल्य को बदलने की अनुमति देता है, भले ही शब्दकोश फ़ंक्शन द्वारा कभी वापस नहीं किया जाता है? फ़ंक्शन का उपयोग करने का एक मुख्य कारण यह है कि फ़ंक्शन में शेष कोड से सबकुछ अलग करना है, लेकिन यदि मैं फ़ंक्शन के अंदर समान वैरिएबल नामों का उपयोग करना चुनता हूं तो यह संभव नहीं लगता है। मैं इस समझ में था कि किसी फ़ंक्शन में स्पष्ट रूप से परिभाषित कुछ भी उस फ़ंक्शन के लिए स्थानीय है, लेकिन ऐसा लगता है कि शब्दकोश है जो फ़ंक्शन पर इनपुट के रूप में परिभाषित और पास किया गया है।पायथन शब्दकोश एक समारोह के लिए एक इनपुट के रूप में पारित किया गया है जो स्थानीय
Python 2.7.2+ (default, Oct 4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
============= केस 1 ===============
>>> def testfun1(a):
... a=2
...
>>> a=0
>>> testfun1(a)
>>> a
0
====== ======= केस 2 ===============
>>> def testfun2(b):
... b['test']=2
...
>>> b={}
>>> testfun2(b)
>>> b
{'test': 2}
============= केस 3 ==== ===========
>>> def testfun3():
... c=2
...
>>> c=0
>>> testfun3()
>>> c
0
============= प्रकरण 4 =============== (इस सवाल से समझाया: Global dictionaries don't need keyword global to modify them?)
>>> def testfun4():
... d['test']=10
...
>>> d={}
>>> testfun4()
>>> d
{'test': 10}
शब्दकोश को कॉपी करने के लिए कॉपी मॉड्यूल की प्रतिलिपि विधि का उपयोग करना चाहिए ** copy.deepcopy (डी) ** जो डी की गहरी प्रतिलिपि देता है। उथले बनाम गहरी प्रतिलिपि के बारे में अधिक जानकारी के लिए कृपया https://docs.python.org/2/library/copy.html –
@PavanGupta देखें कि यह सब उस प्रतिलिपि पर निर्भर करता है जिस पर आप चाहते हैं। यदि आपके पास एक ऐसा नियम है जिसके मूल्य भी हैं, तो क्या आप उन डिक्टियों की प्रतियां बनाना चाहते हैं, या उन्हें इंगित करना चाहते हैं। यह नियम/प्रश्न बार-बार लागू होता है। – Darthfett