ඔබ dict2 = dict1 කරන සෑම විටම, dict2 යන්නෙන් dict1 යන්නෙන් අදහස් කෙරේ. Dict1 සහ dict2 යන දෙකම මතකයේ එකම ස්ථානයකට යොමු කරයි. පයිතන් හි විකෘති වස්තූන් සමඟ වැඩ කරන අතරතුර මෙය සාමාන්ය අවස්ථාවකි. ඔබ පයිතන්හි විකෘති වස්තූන් සමඟ වැඩ කරන විට එය නිදොස් කිරීම දුෂ්කර බැවින් ඔබ ප්රවේශම් විය යුතුය.
Dict2 = dict1 භාවිතා කරනවා වෙනුවට, ඔබ dict1 වෙතින් dict2 වෙන් කිරීම සඳහා පයිතන්ගේ පිටපත් මොඩියුලයේ පිටපත් (නොගැඹුරු පිටපත) සහ ගැඹුරු පිටපත් ක්රමය භාවිතා කළ යුතුය .
නිවැරදි ක්රමය නම්:
>>> dict1 = {"key1": "value1", "key2": "value2"}
>>> dict2 = dict1.copy()
>>> dict2
{'key1': 'value1', 'key2': 'value2'}
>>> dict2["key2"] = "WHY?"
>>> dict2
{'key1': 'value1', 'key2': 'WHY?'}
>>> dict1
{'key1': 'value1', 'key2': 'value2'}
>>> id(dict1)
140641178056312
>>> id(dict2)
140641176198960
>>>
ඔබට හැඳුනුම්පත දැකිය හැකි පරිදි dict1 සහ dict2 යන දෙකෙහිම වෙනස් වේ, එයින් අදහස් වන්නේ දෙකම මතකයේ විවිධ ස්ථාන වෙත යොමු කිරීම / යොමු කිරීමයි.
මෙම විසඳුම වෙනස් කළ නොහැකි අගයන් සහිත ශබ්දකෝෂ සඳහා ක්රියා කරයි, විකෘති අගයන් ඇති අයට මෙය නිවැරදි විසඳුම නොවේ.
උදා:
>>> import copy
>>> dict1 = {"key1" : "value1", "key2": {"mutable": True}}
>>> dict2 = dict1.copy()
>>> dict2
{'key1': 'value1', 'key2': {'mutable': True}}
>>> dict2["key2"]["mutable"] = False
>>> dict2
{'key1': 'value1', 'key2': {'mutable': False}}
>>> dict1
{'key1': 'value1', 'key2': {'mutable': False}}
>>> id(dict1)
140641197660704
>>> id(dict2)
140641196407832
>>> id(dict1["key2"])
140641176198960
>>> id(dict2["key2"])
140641176198960
අපි dict1 සඳහා පිටපතක් යෙදුවද, විකෘති වල අගය dict2 සහ dict1 යන දෙඅංශයේම අසත්ය ලෙස වෙනස් කර ඇති බව ඔබට පෙනෙනු ඇත. මෙයට හේතුව වන්නේ අපි ඩික්ට් 1 හි විකෘති වූ කොටසක වටිනාකම වෙනස් කිරීමයි. අපි පිටපතක් පිටපතක් යොදන විට, එය කරන්නේ නොගැඹුරු පිටපතක් පමණක් වන අතර එයින් අදහස් කරන්නේ එය සියලු වෙනස් කළ නොහැකි අගයන් නව නියෝගයකට පිටපත් කරන අතර විකෘති අගයන් පිටපත් නොකරන නමුත් එය ඒවා යොමු කරනු ඇත.
අවසාන විසඳුම වන්නේ විකෘති අගයන් ඇතුළුව පිටපත් කරන ලද සියලු අගයන් සමඟ නව ආ ict ාවක් මුළුමනින්ම නිර්මාණය කිරීම සඳහා dict1 හි ගැඹුරු පිටපතක් කිරීමයි.
>>>import copy
>>> dict1 = {"key1" : "value1", "key2": {"mutable": True}}
>>> dict2 = copy.deepcopy(dict1)
>>> dict2
{'key1': 'value1', 'key2': {'mutable': True}}
>>> id(dict1)
140641196228824
>>> id(dict2)
140641197662072
>>> id(dict1["key2"])
140641178056312
>>> id(dict2["key2"])
140641197662000
>>> dict2["key2"]["mutable"] = False
>>> dict2
{'key1': 'value1', 'key2': {'mutable': False}}
>>> dict1
{'key1': 'value1', 'key2': {'mutable': True}}
ඔබට පෙනෙන පරිදි, හැඳුනුම්පත් වෙනස් වේ, එයින් අදහස් වන්නේ dict2 සම්පූර්ණයෙන්ම dict1 හි සියලු අගයන් සහිත නව නියෝගයක් බවයි.
මුල් ආ .ාවට බලපෑමක් නොකර විකෘති අගයන් කිසිවක් වෙනස් කිරීමට ඔබට අවශ්ය නම් ඩීප්කොපි භාවිතා කළ යුතුය. එසේ නොමැතිනම් ඔබට නොගැඹුරු පිටපතක් භාවිතා කළ හැකිය. මුල් පිටපතෙහි ඇති කැදැලි අගයන් පිටපත් කිරීම සඳහා පුනරාවර්තන ලෙස ක්රියා කරන නිසා ඩීප්කොපි සෙමින් මන්දගාමී වන අතර අමතර මතකයක් ද ගනී.
dict1
සහdict2
එම dict කිරීමට අදහස්.