DEV Community

Cover image for Shallow & Deep Copy
Md Jannatul Nayem
Md Jannatul Nayem

Posted on

Shallow & Deep Copy

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'}}
Enter fullscreen mode Exit fullscreen mode
# 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'}}
Enter fullscreen mode Exit fullscreen mode

তো কিছু দিন পর আমি ডায়েট করা শুরু করছি। ভাই খালি জ্বালায়। কি নাঈম ভাই ঘাস পাতা খান :) আজকে ঘাস পাতা আনতে ভুলে গেছেন?

আমিঃ নাহ এই ভাবে তো হয় না। ভাই আমি সিট চেঞ্জ করব।
টিপুঃ কই যাবেন? আপনাকে তো আমার পাশ থেকে সরতে দিব না।

এর মধ্যে আমাদের অফিস এর লোকেশন চেঞ্জ এর খবর আসে। আমি তো বেজায় খুশি।

#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'}}
Enter fullscreen mode Exit fullscreen mode

তো নতুন অফিসে গিয়ে আমি তো অবাক। কারণ টা কি জানেন?
তাইলে এইটা দেখেন।

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'}}

Enter fullscreen mode Exit fullscreen mode

এই যে কপি টা করা হইছিল। এইটা ছিল 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'}}
Enter fullscreen mode Exit fullscreen mode

আমি জানি না এই পোস্ট দেখলে টিপু ভাই কালকে কোথায় বসায় :)

Image of Datadog

Master Mobile Monitoring for iOS Apps

Monitor your app’s health with real-time insights into crash-free rates, start times, and more. Optimize performance and prevent user churn by addressing critical issues like app hangs, and ANRs. Learn how to keep your iOS app running smoothly across all devices by downloading this eBook.

Get The eBook

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs