লিস্ট কপি কেন দরকার?
পাইথনে new_list = old_list লিখলে দুটি ভেরিয়েবল একই অবজেক্টকে রেফার করে। একটি পরিবর্তন করলে অন্যও বদলায়। আসল কপি (Shallow Copy) বানাতে নিচের পদ্ধতিগুলো ব্যবহার করুন।
পদ্ধতি ১: copy() মেথড (সর্বোচ্চ সুপারিশকৃত)
spring_fruits = ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry'] summer_fruits = spring_fruits.copy() print(summer_fruits) # আউটপুট: ['Apricot', 'Avocado', 'Kiwi', 'Grapefruit', 'Cherry', 'Strawberry']
সিনট্যাক্স: new_list = old_list.copy() — পঠনীয় ও স্পষ্ট।
পদ্ধতি ২: স্লাইসিং (Slicing) — পাইথনিক উপায়
summer_fruits = spring_fruits[:] print(summer_fruits)
[:] মানে পুরো লিস্টের স্লাইস নেওয়া। এটি একটি নতুন লিস্ট অবজেক্ট তৈরি করে।
পদ্ধতি ৩: list() কনস্ট্রাক্টর
summer_fruits = list(spring_fruits) print(summer_fruits)
যেকোনো ইটरेবল (টাপল, সেট, স্ট্রিং) থেকে লিস্ট বানাতে এই পদ্ধতি কাজে লাগে।
পদ্ধতি ৪: লিস্ট কম্প্রিহেনশন
summer_fruits = [fruit for fruit in spring_fruits] print(summer_fruits)
ফিল্টারিং বা ট্রান্সফরমেশন সহ কপি করার সময় এটি উপযোগী।
তুলনাত্মক সারসংক্ষেপ
| পদ্ধতি | সিনট্যাক্স | পড়ন্ত সুবিধা | ফ্লেক্সিবিলিটি |
|---|---|---|---|
| copy() | list.copy() | সর্বোচ্চ | শুধু লিস্টের জন্য |
| Slicing | list[:] | উচ্চ | লিস্ট-স্পেসিফিক |
| list() | list(iterable) | মাঝারি | যেকোনো ইটেরেবল |
| Comprehension | [x for x in list] | মাঝারি | সর্বোচ্চ (ফিল্টার/ম্যাপ সম্ভব) |
গভীর কপি (Deep Copy) কখন দরকার?
উপরের সব পদ্ধতি Shallow Copy তৈরি করে (নেস্টেড অবজেক্টগুলো শেয়ার করা থাকে)। নেস্টেড লিস্ট/অবজেক্ট সম্পূর্ণ আলাদা কপি করতে:
import copy deep_copied_list = copy.deepcopy(original_list)
নিষ্কর্ষ
দৈনন্দিন ব্যবহারে copy() বা [:] স্লাইসিং ব্যবহার করুন। কোডের উদ্দেশ্য স্পষ্ট করতে copy() সেরা। জেনেরিক কনভারশনের জন্য list(), কমপ্লেক্স ট্রান্সফরমেশনের জন্য কম্প্রিহেনশন বেছে নিন।