shallow and deep কপি জিনিসটা খুবই মজার। আমরা অনেক সময় একটা অবজেক্ট কপি করতে চাই। কিন্তু আমরা প্রোগ্রামাররা খুবই অলস প্রকৃতির। তাই টুপ করে কপি করে ফেলি। পরে দেখা যায় ঠিক মত কোথায় কি হচ্ছে না বুঝার কারণে বেকায়দায় পড়ে যাই। কিছু উদাহরণ দিলে বুঝা যাবে।
যেমন আমি যখন জয়েন করি বর্তমান কোম্পানিতে ইন্টার্ন হিসেবে,তার কিছু দিন পর আমার গুরু টিপু ভাই জয়েন করে সফটওয়্যার ইঞ্জিনিয়ার হিসেবে। এই বিষয়টা এইভাবে লেখা যায়।
me = {
"name": "Nayem",
"info": {
"company": "deshi",
"stack": "laravel",
"os": "ubuntu",
"role": "intern",
"seat": "window-seat"
}
}
print(me)
output: {'name': 'Nayem', 'info': {'company': 'deshi', 'stack': 'laravel', 'os': 'ubuntu', 'role': 'intern', 'seat': 'window-seat'}}
# now tipu bro comes
tipu = me.copy()
tipu["name"] = "Tipu The Yo Boy"
tipu["info"]["role"] = "Software Engineer"
tipu["info"]["seat"] = "right side of Nayem"
print(tipu)
output: {'name': 'Tipu The Yo Boy', 'info': {'company': 'deshi', 'stack': 'laravel', 'os': 'ubuntu', 'role': 'Software Engineer', 'seat': 'right side of Nayem'}}
তো কিছু দিন পর আমি ডায়েট করা শুরু করছি। ভাই খালি জ্বালায়। কি নাঈম ভাই ঘাস পাতা খান :) আজকে ঘাস পাতা আনতে ভুলে গেছেন?
আমিঃ নাহ এই ভাবে তো হয় না। ভাই আমি সিট চেঞ্জ করব।
টিপুঃ কই যাবেন? আপনাকে তো আমার পাশ থেকে সরতে দিব না।
এর মধ্যে আমাদের অফিস এর লোকেশন চেঞ্জ এর খবর আসে। আমি তো বেজায় খুশি।
#Now I wish I would change my seat location in new office
#At new office
me["info]["role"] = "Jr. Software Engineer"
me["info"]["seat"] = "new office new seat near window"
print(me)
output: {'name': 'Nayem', 'info': {'company': 'deshi', 'stack': 'laravel', 'os': 'ubuntu', 'role': 'Jr. Software Engineer', 'seat': 'new office new seat near window'}}
তো নতুন অফিসে গিয়ে আমি তো অবাক। কারণ টা কি জানেন?
তাইলে এইটা দেখেন।
print(tipu)
output: {'name': 'Tipu The Yo Boy', 'info': {'company': 'deshi', 'stack': 'laravel', 'os': 'ubuntu', 'role': 'Software Engineer', 'seat': 'new office new seat near window'}}
এই যে কপি টা করা হইছিল। এইটা ছিল shallow copy. একটা অবজেক্টের ভিতর আরেকটা অবজেক্ট নেস্টেড অবস্থায় ছিল। যখন কপি করা হইছিল তখন শুধু মাদার অবজেক্ট এর রেফারেন্স টা কপি করা হইছিল। বাট ভিতরের আরও যে চাইল্ড রেফারেন্স গুলো ছিল ওইটা আর কপি করা হয় নাই। তাই ঘটনা টা এইরকম ঘটছে।
যাই হোক নতুন অফিসে আবার ওইদিন তারিকুল ভাই বলতেছিল সে আমাদের সাইডে বসতে চায়। আমিও খুশিতে গদগদ হয়ে বলতে ছিলাম ভাই আপনি আমার সিটে এসে আমাকে আপনার ওইটায় দেন। টুপ করে টিপু ভাই বলে আপনাকে সোজা মিটিং রুমে একা পাঠায় দিব। আচ্ছা আপানারাই বলেন একা একা এক রুমে যাওয়া যায়? :)
কিনুত যদি সত্যি পাঠায় দিত। তাইলে কি হইত জানেন?
from copy import deepcopy
me = deepcopy(tipu)
me["name"] = "Nayem"
me["info"]["seat"] = "Meeting room"
print(me)
print(tipu)
output: {'name': 'Nayem', 'info': {'company': 'deshi', 'stack': 'laravel', 'os': 'ubuntu', 'role': 'Software Engineer', 'seat': 'Meeting room'}}
{'name': 'Tipu The Yo Boy', 'info': {'company': 'deshi', 'stack': 'laravel', 'os': 'ubuntu', 'role': 'Software Engineer', 'seat': 'new office new seat near window'}}
আমি জানি না এই পোস্ট দেখলে টিপু ভাই কালকে কোথায় বসায় :)
Top comments (0)