কম্পিউটার টিউটোরিয়াল

পাইথন - ডিকশনারি কপি করার পদ্ধতিগুলো: শ্যালো vs ডিপ কপি

পাইথনে ডিকশনারি কপি করার সময় শ্যালো (shallow) এবং ডিপ (deep) কপির পার্থক্য বোঝা অত্যন্ত গুরুত্বপূর্ণ, অন্যথায় অপ্রত্যাশিত বাগ হতে পারে।

উদাহরণ: শ্যালো কপি (copy() বা dict())

original = {1: 'vishesh', 2: 'python'}

# পদ্ধতি ১: copy() মেথড
new = original.copy()
new.clear()
print('new:', new)       # {}
print('original:', original)  # {1: 'vishesh', 2: 'python'} → অপরিবর্তিত

# পদ্ধতি ২: dict() কনস্ট্রাক্টর
new2 = dict(original)
new2.clear()
print('new2:', new2)     # {}
print('original:', original)  # অপরিবর্তিত

উদাহরণ: এসাইনমেন্ট (=) — কপি নয়, রেফারেন্স!

original = {1: 'one', 2: 'two'}
new = original  # এটি কপি নয়, একই অবজেক্টের নতুন নাম

new.clear()
print('new:', new)       # {}
print('original:', original)  # {} → মূলটিও খালি হয়ে গেলো!

নেস্টেড ডিকশনারির কেসে সমস্যা

original = {'a': [1, 2, 3], 'b': {'x': 10}}
shallow = original.copy()

shallow['a'].append(4)      # নেস্টেড লিস্ট পরিবর্তন → মূলটিও বদলাবে!
shallow['b']['x'] = 20      # নেস্টেড ডিকশনারি পরিবর্তন → মূলটিও বদলাবে!

print('original:', original)  # {'a': [1, 2, 3, 4], 'b': {'x': 20}}

সমাধান: copy.deepcopy() ব্যবহার করুন

import copy

original = {'a': [1, 2, 3], 'b': {'x': 10}}
deep = copy.deepcopy(original)

deep['a'].append(4)
deep['b']['x'] = 20

print('original:', original)  # {'a': [1, 2, 3], 'b': {'x': 10}} → নিরাপদ
print('deep:', deep)          # {'a': [1, 2, 3, 4], 'b': {'x': 20}}

তুলনা টেবিল

পদ্ধতিপ্রकारনেস্টেড অবজেক্টব্যবহার
= (এসাইনমেন্ট)রেফারেন্সশেয়ার করাকপি নয়, এড়িয়ে চলুন
dict.copy()শ্যালোশেয়ার করাফ্ল্যাট ডিকশনারির জন্য ঠিক
dict(original)শ্যালোশেয়ার করাcopy() এর সমতুল্য
copy.deepcopy()ডিপস্বতন্ত্র কপিনেস্টেড ডেটার জন্য আবশ্যক
স্মরণীয়: শ্যালো কপি শুধু প্রথম লেয়ারের কী-ভ্যালু কপি করে। নেস্টেড মিউটেবল অবজেক্ট (লিস্ট, ডিকশনারি, সেট) উভয় ডিকশনারি শেয়ার করে। ডিপ কপি সম্পূর্ণ স্বতন্ত্র ক্লোন তৈরি করে।
  1. পাইথনে ডিকশনারি আপডেট (Updating Dictionary)

  2. পাইথন ডিকশনারি has_key() মেথড

  3. পাইথনে ডিকশনারি (Dictionary) এর ওপর ইটারেট করা

  4. পাইথনে ডিকশনারি মেথডসমূহ (Dictionary Methods)