2013-10-13 12 views
5
array1=[0,1,2] 
array2=array1 
array2[0]=234234 
print array1 

उत्पादन:स्थापना दो सरणियों के बराबर

[234234, 1, 2] 

क्यों अजगर परिवर्तन 'array1'? क्या यह सिर्फ array2 नहीं बदलना चाहिए? जब मैं array2 बदलता हूं तो मैं अजगर को बदलने से पाइथन को कैसे रोक सकता हूं?

+3

स्टैक ओवरव्लो में आपका स्वागत है। डाउनवॉटर के बारे में ज्यादा चिंता न करें - कुछ लोग सोचते हैं कि प्रत्येक डुप्लिकेट या शुरुआती प्रश्न को कम किया जाना चाहिए। लेकिन डुप्लिकेट होने के अलावा यह एक अच्छा सवाल है: यह स्पष्ट है कि प्रश्न क्या है और यह पिथी कोड दिखाता है जो स्पष्ट रूप से समस्या का प्रदर्शन करता है। – kojiro

उत्तर

4

उपयोग टुकड़ा अंकन इस

array2 = array1[:] 

तरह कॉपी करने के लिए या आप उपयोग कर सकते हैं list समारोह

array2 = list(array1) 

जब आप किसी अन्य सूची के लिए एक सूची निर्दिष्ट करते हैं, एक नई सूची नहीं बनाया जाएगा, लेकिन दोनों एक ही सूची को संदर्भित करने के लिए चर बनाए जाएंगे। इस कार्यक्रम के साथ इसकी पुष्टि की जा सकती है।

array1 = [1, 2, 3, 4] 
array2 = array1 
print id(array1), id(array2) 

वे दोनों एक ही आईडी प्रिंट करेंगे। इसका मतलब है कि वे दोनों एक जैसे हैं (यदि आप सी पृष्ठभूमि से हैं तो आप उन्हें पॉइंटर्स के रूप में सोच सकते हैं (सीपीथन कार्यान्वयन में वे वास्तव में पॉइंटर्स हैं, अन्य कार्यान्वयन अद्वितीय आईडी मुद्रित करना चुनते हैं - कृपया कोजीरो की टिप्पणी जांचें))। idhere के बारे में और पढ़ें। जब आप

array3 = array1[:] 
array4 = list(array1) 
print id(array1), id(array3), id(array4) 

आपको अलग-अलग आईडी मिलेंगे, क्योंकि इन मामलों में नई सूचियां बनाई जाएंगी।

+0

+1 एफडब्ल्यूआईडब्ल्यू, कि आईडी 'पॉइंटर्स की तरह हैं, एक कार्यान्वयन विवरण है जो सीपीथन के लिए विशिष्ट है। यदि पाइथन दुभाषिया अलग है तो वे नहीं हो सकते हैं। लेकिन वे अभी भी इस मामले में एक ही मूल्य रखने की गारंटी देंगे, भले ही वह मान सूची का स्मृति पता न हो। – kojiro

+0

ओएमजी धन्यवाद, मैं आपका जीवन हूं। आप भी वह व्यक्ति थे जिन्होंने मुझे कम किया क्योंकि यदि ऐसा है तो मैं निश्चित रूप से पिछले बयान को वापस लेने पर विचार करूंगा। – user2875270

+0

@ user2875270 नहीं। मैंने डाउनवोट नहीं किया :) यह एक शुरुआती प्रश्न है जिसे हम सभी के पास था। तो, मैंने अभी संकेत दिया है कि प्रश्न का उत्तर किसी अन्य धागे में दिया जा चुका है। – thefourtheye

2

array1 और array2 उसी सूची के लिए दो नाम हैं, क्योंकि इस तरह आप उन्हें सेट करते हैं। आप इस नहीं करना चाहते हैं, निम्न विधियों में से एक का उपयोग कर सूची की प्रतिलिपि:

array2 = array1[:] 
array2 = list(array1) 
10

array1 और array2हैं एक ही वस्तु। यही कारण है कि या तो बदलना दूसरे को बदलता है।

array2 = array1[:] 

more on this here देखें: आप प्रतिलिपि वस्तु चाहते हैं, यहाँ एक तरह से यह करने के लिए है।

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