2011-09-15 10 views
7

यदि मेरे पास a और b और दोनों संदर्भ वस्तु obj हैं, तो क्या होता है जब मैं अचार करता हूं और फिर ऑब्जेक्ट को पुनर्स्थापित करता हूं? मसालेदार डेटा 'पता' है कि a और b दोनों एक ही ऑब्जेक्ट का संदर्भ दिया जाएगा और सब कुछ उसी के अनुसार बहाल, या दो दो अलग — और शुरू में बराबर — वस्तुओं मिलेगा?पिकल एकाधिक ऑब्जेक्ट संदर्भों को संभाल सकता है

उत्तर

7

हाँ, साझा वस्तुओं केवल एक बार धारावाहिक हो जाएगी (अचार प्रोटोकॉल भी वृत्तीय संदर्भ संभाल कर सकते हैं)।

documentation से

:

pickle मॉड्यूल वस्तुओं यह पहले से ही धारावाहिक है, ताकि एक ही वस्तु के लिए बाद में संदर्भ जा फिर धारावाहिक नहीं होगा का ट्रैक रखता है। marshal ऐसा नहीं करता है।

यह दोनों पुनरावर्ती वस्तुओं और वस्तु साझा करने के लिए प्रभाव पड़ता है। पुनरावर्ती वस्तुएं ऐसी वस्तुएं हैं जिनमें स्वयं के संदर्भ शामिल हैं। ये marshal द्वारा नियंत्रित नहीं कर रहे हैं, और वास्तव में, पुनरावर्ती वस्तुओं मार्शल करने के लिए अपने अजगर दुभाषिया दुर्घटना होगा प्रयास करते हैं। ऑब्जेक्ट शेयरिंग तब होता है जब में उसी ऑब्जेक्ट के एकाधिक संदर्भ होते हैं, ऑब्जेक्ट पदानुक्रम में क्रमबद्ध होने के विभिन्न स्थानों में। pickle भंडार इस तरह की वस्तुओं को केवल एक बार, और यह सुनिश्चित करता है कि सभी अन्य संदर्भ मास्टर कॉपी करने के लिए बिंदु। साझा वस्तुओं साझा बने हुए हैं, जो बहुत परिवर्तनशील वस्तुओं के लिए महत्वपूर्ण हो सकता है।

+0

यह अच्छा है। : डी –

7

@aix अंक के रूप में, pickle एक ही ऑब्जेक्ट के कई संदर्भों को समझता है, लेकिन केवल एक ही पिकलिंग के भीतर। यही है, अचार हमेशा एक वस्तु को अचार करता है। यदि उस ऑब्जेक्ट में इसके संदर्भ हैं, तो उन संदर्भों को अनपिक्षित ऑब्जेक्ट में ठीक से साझा किया जाएगा।

लेकिन यदि आप दो वस्तुओं को अचार करने के लिए दो बार अचार कहते हैं, तो वस्तुओं के बीच साझा संदर्भ ठीक से संरक्षित नहीं किए जाएंगे। वस्तु अब दो बार मौजूद होगी।

संबंधित मुद्दे