दिलचस्प पोस्ट
डिफ़ॉल्ट समापन बिंदु तत्व नहीं मिला स्ट्रिंग तुलना – एंड्रॉइड मैं सीएसएस के साथ पाठ कैसे बदल सकता हूँ? सी # कंसोल पाइप के साथ इनपुट प्राप्त करते हैं क्या हमें आईई 6 का समर्थन करना चाहिए? मैं जावा में वर्तमान तारीख को एक महीने कैसे जोड़ूं? वस्तु वर्ग की विशेषताओं को सेट नहीं किया जा सकता Java.io.tmpdir को नियंत्रित करने के लिए पर्यावरण चर? त्रुटि कोड: 2013. क्वेरी के दौरान MySQL सर्वर से कनेक्शन खो गया पायथन में निजी सदस्य एक बिटमैप के साथ कॉलबैक प्राप्त करने के लिए पिकासो का उपयोग करें "जीआईटी क्लोन git@remote.git" को चलाते समय उपयोगकर्ता नाम और पासवर्ड कैसे प्रदान करें? UIAppearance का उपयोग करके कस्टम आईओएस यूआईडेटिकपिकर जावा अनुप्रयोग में अनुकूलन शॉर्टकट अंगुलियोज़ निर्देश के गुणों को एक्सेस करना

असाइनमेंट के माध्यम से पायथन कॉपी?

मुझे उम्मीद थी कि निम्नलिखित कोड सिर्फ dict_a , dict_b और dict_c शब्दकोशों को आरंभ करेगा लेकिन प्रभाव के माध्यम से यह एक प्रति है:

 dict_a = dict_b = dict_c = {} dict_c['hello'] = 'goodbye' print dict_a print dict_b print dict_c 

जैसा कि आप देख सकते हैं कि परिणाम निम्नानुसार है:

 {'hello': 'goodbye'} {'hello': 'goodbye'} {'hello': 'goodbye'} 

वह प्रोग्राम पिछले परिणाम क्यों देता है, जब मैं इसे वापस करने की अपेक्षा करता हूं:

 {} {} {'hello': 'goodbye'} 

वेब के समाधान से एकत्रित समाधान "असाइनमेंट के माध्यम से पायथन कॉपी?"

यह इसलिए है क्योंकि पायथन में, वेरिएबल्स (नाम) केवल व्यक्तिगत ऑब्जेक्ट्स का संदर्भ हैं। जब आप dict_a = dict_b असाइन करते हैं, तो आप वास्तव में एक स्मृति पता (या संकेतक, यदि आप चाहते हैं) dict_b से dict_b तक dict_b कर dict_a उस शब्दकोश का अभी भी एक उदाहरण है

वांछित व्यवहार प्राप्त करने के लिए, या तो dict.copy पद्धति का उपयोग करें, या copy.deepcopy उपयोग copy.deepcopy यदि आपके शब्दकोश में नेस्टेड डायट्स या अन्य नेस्टेड ऑब्जेक्ट्स हो सकते हैं।

 >>> a = {1:2} >>> b = a.copy() >>> b {1: 2} >>> b[3] = 4 >>> a {1: 2} >>> b {1: 2, 3: 4} >>> 

भले ही

 >>> dict_a, dict_b, dict_c = {}, {}, {} 

ज्यादातर मामलों में जाने का सही तरीका है, जब यह 3 से अधिक मिलता है तो यह अजीब लग रहा है

कल्पना कीजिए

 >>> a, b, c, d, e, f = {}, {}, {}, {}, {}, {} 

उन मामलों में जहां मैं 3 से अधिक चीजों को प्रारंभ करना चाहता हूं, मैं उपयोग करता हूं

 >>> a, b, c, d, e, f, = [dict() for x in range(6)] 

सावधानी : [{} for x in range(6)] उपयोग न करें [{} for x in range(6)]

जैसा कि पहले डैनबेन ने कहा था, आप केवल 3 चर में उसी डिक्ट्री की प्रतिलिपि बना रहे हैं, जिससे कि प्रत्येक एक ही ऑब्जेक्ट को फिर से बदले।

जिस व्यवहार को आप चाहते हैं, उसे प्राप्त करने के लिए, आपको प्रत्येक चर में एक भिन्न शब्द को instanciate करना चाहिए:

 >>> dict_a, dict_b, dict_c = {}, {}, {} >>> dict_c['hello'] = 'goodbye' >>> print dict_a {} >>> print dict_b {} >>> print dict_c {'hello': 'goodbye'} >>> 

आपका पहला असाइनमेंट वही डिक्शनरी ऑब्जेक्ट को vari_s, dict_b, और dict_c को निर्दिष्ट करता है। यह dict_c = {} के समतुल्य है; dict_b = dict_c; dict_a = dict_c