आज मुझे पता चला कि अजगर अभिव्यक्ति {}
कैश, और एक नया खाली dict जब यह एक चर के लिए निर्दिष्ट की के साथ यह बदल देता है:अजीब के स्पष्ट कैशिंग से संबंधित व्यवहार "{}"
print id({})
# 40357936
print id({})
# 40357936
x = {}
print id(x)
# 40357936
print id({})
# 40356432
मुझे नहीं है स्रोत कोड को देखा, लेकिन मुझे यह पता है कि यह कैसे कार्यान्वित किया जा सकता है। (हो सकता है कि जब वैश्विक {}
के संदर्भ गिनती वृद्धि की जाती है, वैश्विक {}
प्रतिस्थापित हो जाता है।)
लेकिन इस बिट पर विचार करें:
def f(x):
x['a'] = 1
print(id(x), x)
print(id(x))
# 34076544
f({})
# (34076544, {'a': 1})
print(id({}), {})
# (34076544, {})
print(id({}))
# 34076544
f
के कारण यह बदला जाएगा बिना वैश्विक dict को संशोधित करता है, और यह संशोधित निर्देश मुद्रित करता है। लेकिन आईडी के बावजूद f
के बाहर, वैश्विक निर्देश अब खाली है!
क्या हो रहा है ??
आपको इसमें रुचि भी हो सकती है: http://stackoverflow.com/questions/15315096/why-the-id-of-an-object-would-change-depending-on-the-line-in-the -पिथन-खोल/15321863 # 15321863 – User
बहुत अच्छा किनारा मामला, साझा करने के लिए धन्यवाद। – dimo414
पाइथन की 'आईडी()' ऑब्जेक्ट्स के लिए एक आईडी के रूप में एक स्मृति पता (कम से कम CPython कार्यान्वयन में) का उपयोग करता है। यह केवल एक बिंदु पर एक अद्वितीय पहचानकर्ता है, जो आपके कार्यक्रम के पूरे जीवनकाल में अद्वितीय नहीं है। यह दस्तावेज़ीकरण में स्पष्ट है: http://docs.python.org/2/library/functions.html#id –