दिलचस्प पोस्ट
आंशिक दृश्य ASP.NET MVC 3 से रेजर व्यू इंजन के साथ विशिष्ट अनुभागों में सामग्री इंजेक्शन साझा-स्मृति आईपीसी सिंक्रनाइज़ेशन (लॉक-फ्री) JSF 2.0 समग्र घटक के साथ एक गतिशील सूची कैसे लागू करें? संदर्भित शैली विशेषताओं को ओवरराइड करना पांडा डेटाफ़्रेम कॉलम हेडर से सूची प्राप्त करें मैच के लिए RegEx / जावास्क्रिप्ट टिप्पणियों की जगह (दोनों मल्टीलाइन और इनलाइन) एक फ़ाइल बदलते समय अधिसूचना? AngularJS में एक मार्ग बदलने के लिए कैसे देखें? स्टैक वैरिएबल जीसीसी __डेटाइट __ (गठबंधन (एक्स)) द्वारा गठबंधन कर रहे हैं? क्रॉसब्रॉयर ऑनबीयरनलोड? मैं सीएसएस के साथ पाठ कैसे बदल सकता हूँ? फ़ाइल विवरणकर्ता क्या हैं, सरल शब्दों में समझाया गया है? आप एएसपी.नेट एमवीसी में एनएम्प से एक ड्रॉपडाउन सूची कैसे बनाते हैं? एंड्रॉइड: मैं ViewPager WRAP_CONTENT नहीं कर पा रहा हूं Git में चेक-अप उपनिर्देशिकाएं?

मैं अजगर में वस्तु की एक प्रति कैसे बना सकता हूं?

मैं किसी ऑब्जेक्ट की प्रतिलिपि बनाना चाहता हूं। मैं चाहता हूं कि नई ऑब्जेक्ट को पुराने ऑब्जेक्ट (फ़ील्ड के मान) के सभी गुणों के पास होना चाहिए। लेकिन मुझे स्वतंत्र वस्तुओं रखना है इसलिए, अगर मैं नए ऑब्जेक्ट के फ़ील्ड्स के मूल्यों को बदलता हूं, तो पुराने ऑब्जेक्ट को उस पर असर नहीं होना चाहिए।

वेब के समाधान से एकत्रित समाधान "मैं अजगर में वस्तु की एक प्रति कैसे बना सकता हूं?"

copy.deepcopy() फ़ंक्शन पर एक नज़र डालें यह ठीक उसी तरह करना चाहिए जो आपको चाहिए। एक अच्छा सवाल के लिए एक संबंधित प्रश्न के उत्तर भी देखें

मैं अजगर में वस्तु की एक प्रति कैसे बना सकता हूं?

इसलिए, अगर मैं नए ऑब्जेक्ट के फ़ील्ड्स के मूल्यों को बदलता हूं, तो पुराने ऑब्जेक्ट को उस पर असर नहीं होना चाहिए।

तुम्हारा मतलब है एक अस्थायी वस्तु फिर

पायथन 3 में, सूचियों को copy विधि प्राप्त होती है (2 में, आप प्रति बनाने के लिए एक टुकड़ा का उपयोग करते हैं):

 >>> a_list = list('abc') >>> a_copy_of_a_list = a_list.copy() >>> a_copy_of_a_list is a_list False >>> a_copy_of_a_list == a_list True 

उथले प्रतियां

उथले प्रतियां केवल बाहरी कंटेनर की प्रतियां हैं

list.copy एक उथले प्रति है:

 >>> list_of_dict_of_set = [{'foo': set('abc')} ... ] >>> list_of_dict_of_set = [{'foo': set('abc')}] >>> lodos_copy = list_of_dict_of_set.copy() >>> lodos_copy[0]['foo'].pop() 'c' >>> lodos_copy [{'foo': {'b', 'a'}}] >>> list_of_dict_of_set [{'foo': {'b', 'a'}}] 

आपको आंतरिक वस्तुओं की एक प्रति प्राप्त नहीं होती है वे वही वस्तुएं हैं – इसलिए जब वे उत्परिवर्तित होते हैं, तो परिवर्तन दोनों कंटेनरों में दिखाई देता है

गहरी प्रतियां

गहरी प्रतियां प्रत्येक आंतरिक वस्तु की पुनरावर्ती प्रतियां हैं।

 >>> lodos_deep_copy = copy.deepcopy(list_of_dict_of_set) >>> lodos_deep_copy[0]['foo'].add('c') >>> lodos_deep_copy [{'foo': {'c', 'b', 'a'}}] >>> list_of_dict_of_set [{'foo': {'b', 'a'}}] 

परिवर्तन मूल में केवल प्रतिलिपि में प्रतिबिंबित नहीं होते हैं

अपरिवर्तनीय वस्तुओं

अपरिवर्तनीय वस्तुओं को आमतौर पर कॉपी करने की आवश्यकता नहीं होती है वास्तव में, यदि आप कोशिश करते हैं, तो पायथन आपको केवल मूल वस्तु देगा:

 >>> a_tuple = tuple('abc') >>> tuple_copy_attempt = a_tuple.copy() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'copy' 

ट्यूपल्स के पास एक कॉपी विधि भी नहीं है, तो इसे एक टुकड़ा के साथ आज़माएं:

 >>> tuple_copy_attempt = a_tuple[:] 

लेकिन हम देखते हैं कि यह एक ही वस्तु है:

 >>> tuple_copy_attempt is a_tuple True 

इसी प्रकार तार के लिए:

 >>> s = 'abc' >>> s0 = s[:] >>> s == s0 True >>> s is s0 True 

और फ्रॉजेन्ससेट के लिए, भले ही उनके पास एक copy विधि है:

 >>> a_frozenset = frozenset('abc') >>> frozenset_copy_attempt = a_frozenset.copy() >>> frozenset_copy_attempt is a_frozenset True 

अपरिवर्तनीय वस्तुओं की प्रतिलिपि कब करें

अपरिवर्तनीय वस्तुओं की नकल की जानी चाहिए, यदि आपको एक अस्थायी आंतरिक ऑब्जेक्ट की प्रतिलिपि की आवश्यकता है।

 >>> tuple_of_list = [], >>> copy_of_tuple_of_list = tuple_of_list[:] >>> copy_of_tuple_of_list[0].append('a') >>> copy_of_tuple_of_list (['a'],) >>> tuple_of_list (['a'],) >>> deepcopy_of_tuple_of_list = copy.deepcopy(tuple_of_list) >>> deepcopy_of_tuple_of_list[0].append('b') >>> deepcopy_of_tuple_of_list (['a', 'b'],) >>> tuple_of_list (['a'],) 

जैसा कि हम देख सकते हैं, जब प्रतिलिपि का आंतरिक उद्देश्य उत्परिवर्तित होता है, तो मूल परिवर्तन नहीं होता है।